dayvsonspacca / psl-toml
A TOML parser for PHP built on top of azjezz/psl
v1.0.3
2026-03-04 14:16 UTC
Requires
- php: ^8.4
- azjezz/psl: ^4.3
Requires (Dev)
- carthage-software/mago: ^1.12.0
- phpunit/phpunit: ^13
README
A TOML 1.1 parser for PHP 8.4+ built on top of azjezz/psl.
Requirements
- PHP 8.4+
azjezz/psl^4.3
Installation
composer require dayvsonspacca/psl-toml
Usage
Parsing a string
use PslToml\Toml; use Psl\Result\Success; use Psl\Type; $result = Toml::parse(<<<TOML name = "Alice" version = 1 [database] host = "localhost" port = 5432 TOML); if ($result instanceof Success) { $doc = $result->getResult(); $doc->get('name', Type\string())->unwrap(); // "Alice" $doc->get('database.port', Type\int())->unwrap(); // 5432 }
Loading a file
use PslToml\Toml; use Psl\Result\Success; use Psl\Type; $result = Toml::load('/path/to/config.toml'); if ($result instanceof Success) { $doc = $result->getResult(); }
Working with the Document
// Check if a key exists $doc->has('database.host'); // true // Get a nested table as a Document $db = $doc->table('database')->unwrap(); $db->get('host', Type\string())->unwrap(); // "localhost" // List top-level keys $doc->keys(); // ['name', 'version', 'database'] // Export to a plain PHP array $doc->toArray();
Result API
Both Toml::parse() and Toml::load() return a Psl\Result\ResultInterface<Document>, so you never need a try/catch:
use Psl\Result\Success; use Psl\Result\Failure; $result = Toml::parse($source); if ($result instanceof Failure) { $error = $result->getThrowable(); // ParseException with position info }
License
MIT — see LICENSE.