dniccum/linear-sdk
A PHP SDK for the Linear API that simplifies working with Linear's GraphQL endpoint. It provides convenient, structured methods for querying issues, projects, teams, and related resources, so you can integrate Linear data into your app without hand-writing GraphQL queries.
CreatesLinearIssues turns any Eloquent model into an issue source on created / updated / deleted. This unlocks roadmap items like "report this record," support-ticket escalation, QA/bug intake from internal tools, and error-to-issue pipelines — without designing an integration per feature./linear configuration page lets a user or team connect their own workspace and choose team, project, status, assignee, labels and priority. That's a support-cost decision: ship the bundled page now, revisit only if the flow measurably hurts conversion.linearEvents() and customizable title/description/comments) is how you decide whether the feature is "fire and forget" or "review before filing." Default it deliberately — automatic-on-updated is the fastest way to generate complaints.<x-linear::settings /> in your own layout, or Linear::ignoreRoutes(). The headless Actions and typed DTOs (Team, Project, WorkflowState, Member) plus docs/custom-ui.md mean "use the plumbing, own the UI" is a supported path rather than a fork.linear_issue_url, linear_issue_identifier and linear_sync_status columns and ships migrations — a schema decision to schedule, not a drop-in.Linear::fake() with assertIssueCreated() and failWith() means no Linear sandbox workspace and no HTTP stubbing in your test suite; this lowers the cost of the feature enough to change whether it's worth building at all.Adopt when:
HasLinearConnection owner model) rather than one shared org-wide token.vendor:publish --tag=linear-assets --force to post-update-cmd, keeping published JS/CSS in sync with the package version, and adding avatar hosts to img-src if you run a strict CSP.Look elsewhere (or build) when:
linear_sync_status), not Linear workflow state flowing back into your app. If "issue closed → update my record" is on the roadmap, that's custom work on top.For executives: This is a stable 1.0 release of a Laravel package that connects our app to Linear the way Laravel Spark handles billing — add a trait, users connect their workspace on a built-in settings page, and issues are filed automatically from model events. It replaces the part of the build we'd never differentiate on: OAuth, token refresh, secure key storage, retry logic and duplicate prevention. Cost is a Composer dependency and a small, known maintenance line item; the trade-off is that it's an unofficial community package from a single maintainer, so we should pilot it on an internal or low-blast-radius surface before making it customer-facing, and be prepared to fork it.
For engineering: PHP 8.3+, Laravel 12–13, composer require plus two publish steps and a migrate. Reliability is designed in: queued jobs with retries and backoff, idempotent creation that adopts an issue after a timeout rather than duplicating, hooks that report rather than throw, failed syncs surfaced on the config page with a retry button, and LinearIssueCreated / LinearIssueFailed / LinearCommentDelivered events to hook into. Linear::fake() covers app tests, and the package itself is PHPStan level 9 with strict TypeScript at 100% coverage across PHP 8.3/8.4 and Laravel 12/13. Two things to plan for: published assets must be re-published after every update (put it in post-update-cmd), and the scope is outbound only — no reading Linear state back into our models.
Ask: approve a scoped pilot on an internal surface, with a decision checkpoint after one release cycle covering (a) issue volume/noise from automatic sending, (b) whether the bundled config page is good enough or we go headless, and (c) maintainer responsiveness as a proxy for dependency risk.
How can I help you explore Laravel packages today?