trustenterprises/hashgraph
PHP/Laravel package for interacting with Hedera Hashgraph, wrapping account, token, and transaction operations in a fluent API so you can query and submit data to the Hedera network from your application.
Architecture fit
The package remains an idiomatic Laravel integration layer: a service provider with auto-discovery, a facade, a publishable config file, and an HTTP client that talks to Trust Enterprises' hosted Hedera REST API. For a team already standardized on Laravel, this is still the lowest-friction way to get something on Hedera without learning the native SDK, key serialization, or mirror-node query patterns.
The critical architectural fact is unchanged: this is not a direct Hedera integration. It is a client for a third-party, centrally operated REST abstraction that sits between your application and Hedera. That means:
What changed in 3.0.1-alpha. The release adds an Inscription implementation (PR #17) — the ability to write arbitrary data/files to Hedera Consensus Service topics. This is a genuine capability expansion, not housekeeping, and it cuts both ways:
It is also a semver-major bump from 2.3.0, shipped as alpha. Treat the API surface as unstable and the upgrade path as unproven until a 3.x stable lands.
Integration feasibility
Mechanically still straightforward. composer require trustenterprises/hashgraph, publish config, set the API endpoint and API key in .env, inject the facade or the underlying client. A competent Laravel developer can have a testnet call working in under a day. The unknowns remain contractual rather than technical: whether a sandbox/testnet endpoint exists, whether the vendor's docs are current, and whether API key provisioning is self-serve.
Two new feasibility caveats specific to 3.0.1-alpha:
Technical risk
Still high, and concentrated in three areas — with the third now materially improved and the first two unchanged:
.env (a common failure) potentially authorizes token movement on a public ledger. This is materially different from leaking a typical SaaS key and should be treated as a financial-controls problem, not a config-hygiene problem. Inscriptions raise the stakes: a leaked key could also be used to publish unwanted data under your account's identity, at your cost.New risk introduced by inscriptions: permanent public data. Anything written to HCS is on-ledger forever and readable by anyone. There is no delete. If a developer ever passes a customer record, a PII field, or an unredacted document to the inscription API, that is unrecoverable and likely a regulatory incident (GDPR/CCPA erasure obligations cannot be satisfied). This must be controlled by code review and by an allowlist of what may be inscribed, not by documentation alone.
Key questions to answer before commitment
hedera-hashgraph/sdk-php or direct mirror-node REST, and what would that cost?Stack fit
Good fit for a Laravel monolith or a Laravel service that already uses the HTTP client, queues, and config caching. It assumes a relatively modern PHP 8.x baseline and PSR-4 autoloading. It is a poor fit for multi-tenant SaaS where each tenant needs its own on-ledger identity, or for anything requiring local signing.
The inscription feature strengthens the fit for the "write-once proof" pattern (audit anchoring, document hashing, provenance) and does nothing for the multi-tenant or local-signing gaps. If anything, inscriptions push you further toward the vendor's model, since chunking and topic management are handled for you.
Migration path
Design for exit from day one. Define your own narrow interface in application code — something like LedgerWriter::submitMessage(), LedgerWriter::transferToken(), LedgerWriter::inscribe(). Bind the package's client as one implementation. This costs a few hours and converts an unhedged vendor bet into a swappable adapter. Alternative implementations to keep in scope: the official Hedera PHP SDK (local signing, more control, more code), direct mirror-node REST for read/verification paths, or the vendor's raw HTTP API without the package if the wrapper goes stale.
Version strategy — this has changed and needs a decision. You now have two live lines:
Default recommendation: do not run alpha in production paths. Either (a) pin 2.3.0 and treat inscriptions as out of scope until 3.x is stable, or (b) spike 3.0.1-alpha in a scratch app to validate the inscription API and cost model, with a written assumption that it will churn. Do not mix lines across environments. In both cases pin explicitly and commit the lockfile.
Compatibility work
Validate in a scratch Laravel app before touching the real codebase: confirm the package installs against your Laravel and PHP versions, that config publishing works, and that a testnet round-trip succeeds. For 3.0.1-alpha specifically, also confirm the major bump did not change the config file shape or facade method names you already depend on. Check whether it depends on Guzzle directly or Laravel's HTTP client, since that affects mocking and retry middleware.
Sequencing
inscribe() can be added or dropped without touching call sites.Maintenance
Assume you will own this code. The maintainer is active again — the January 2024 gap is closed — but the project is single-maintainer, near-zero-adoption, and now shipping alpha majors. Plan to vendor or fork the package into your repository within the first year if you depend on it in production, or accept that Laravel upgrades may strand it. Budget a small recurring maintenance line item. Note that an alpha-track dependency requires more maintenance attention than a stale stable one, not less: you must actively watch for 3.x breaking changes, which is a deliberate ongoing cost.
Support
Support is community-only via GitHub issues, plus whatever commercial support the vendor offers separately. There is no security policy in the repository. For a financial-adjacent dependency, that is a gap you must close internally with your own review and monitoring. The release notes' "have fun and look at the PHP tests for examples" is not a support commitment — calibrate expectations accordingly.
Scaling
Every operation is an HTTP round-trip to a third party, followed by Hedera consensus latency (seconds, not milliseconds). This is unsuitable for synchronous request paths. Put writes behind queues, use webhooks or polling for confirmation, and design read paths against the Hedera mirror node directly so you are not paying vendor latency for queries. Vendor rate limits are unknown and should be treated as a hard constraint until confirmed.
Inscriptions scale differently from message writes: payload size drives both chunking behaviour and HBAR cost, so throughput is bounded by spend as much as by rate limits. A single large inscription can be orders of magnitude more expensive than a 32-byte hash. Model cost per inscription before enabling the feature broadly, and cap payload size at the application layer.
Failure modes
The ones that will actually page someone: vendor API outage or degradation; key compromise or accidental .env exposure; duplicate submissions after retries without idempotency keys; transactions submitted but unconfirmed with no reconciliation job; silent upstream API changes; and breakage on a Laravel or PHP upgrade. Each needs an explicit mitigation — idempotency keys, a reconciliation sweep against mirror-node state, secret scanning, and a pinned lockfile.
Additions from the 3.0.1-alpha release:
inscribe(), review of every new inscription call site, and a pre-commit/integration check that rejects non-hash payloads.Ramp-up
For a Laravel developer, the package itself is a half-day. The real ramp-up is Hedera domain literacy — accounts, keys, tokens, consensus topics, HBAR — plus the vendor's API semantics: roughly one to two weeks to productive, plus a security review that should not be skipped given the custody model. Add the inscription surface on top of that, with the caveat that it currently has no documentation beyond the PHP tests — budget a few days of reading source and probing testnet, and expect to discover undocumented behaviour yourself.
The 0.21 overall score and near-zero adoption mean the team is still effectively the first real user. The 3.0.1-alpha release confirms the project is alive but does not change the staffing conclusion: plan for discovery work, not just integration work, and keep the first production use case non-financial and payload-restricted.
How can I help you explore Laravel packages today?