Caution
This version of Snipe-IT REQUIRES PHP 8.2.0 or greater, 8.4+ recommended. PHP 8.2 is still in security release support until 31 Dec 2026, but let's not play that game - and some of the new features we're working on will require PHP 8.3+, so... get on that!
Whew! Over 750 commits and 83 merged pull requests since v8.7.2, and enough features we decided to go for a mid-release. So much exciting stuff in this release, check it out for yourself!
- 📱 Official Snipe-IT Mobile App is in Beta!
- 🔄 Sync adapters (beta)!!
- 🎛 Non-Admin Dashboard
- 🗓 Unified Calendar
- 🛎 Requestables Overhaul
- ⛙ Asset Model Merge Tool
- 📤 Microsoft Graph mailer
- 💃 OIDC access tokens
- 🕹 More Bulk Controls
- 🥺 Deprecations
- 🎉 Upgrading
- 🤘Security Rockstars
BUT FIRST...
Join the Community!
- Join our Discord! It’s full of great people. We even wrote about it here!
- Follow us on Bluesky at @snipeitapp.com
- Follow us on Mastodon at hachyderm.io/@grokability
- Join us on Reddit (a thing I never thought I'd say) at /r/Snipe_IT
- Join us in MacAdmins Slack
- Subscribe here on Github for notifications about new releases. (We recommend selecting "Releases" only for most users - this repo can get noisy.)
Okay, onto the new stuff:
📱Official Snipe-IT Mobile App is in Beta!
There are a ton of great unofficial Snipe-IT mobile apps out there, but folks have been clamoring for one that is built in-house so they know it will be maintained by us. Welp, it's finally here, and it is, of course, open source.
If you're up for testing the beta, you can do that here:
- iOS: https://testflight.apple.com/join/3B3YcWph
- Android: https://play.google.com/store/apps/details?id=com.grokability.snipeitmobile
If you run into issues or have feature requests, please use the discussions tab in the snipe-it-mobile repo.
🔄 Sync adapters (beta)!!
One of the things we've always been really proud about here is our REST API. We know that you're all using bespoke tools, and the (incredible) Snipe-IT community has come up with some great independent scripts to get info from your MDM/RMM/etc into Snipe-IT. Srsly, we cannot thank you all enough! And you can keep using those if that's what works for you.
If you're looking for something native so that you don't have to maintain a python/powershell integration script in addition to everything else you have to balance, we're so excited to introduce native Sync Adapters.
We're shipping today with 19 built-in adapters for the most commonly requested systems, and also a "Custom HTTP" adapter, which means whatever weird Lua integration script you had running on a Raspberry Pi under your desk just might be able to be retired.
Adapters we're shipping right now:
- Addigy
- Apple Business Manager
- Fleet
- Google Workspace
- Jamf Pro
- Jamf Platform
- Jamf School
- JumpCloud
- Kandji
- Kaseya VSA 10
- Landscape (Canonical)
- Meraki Systems Manager
- Microsoft Intune
- Mosyle
- NinjaOne
- osctrl
- UniFi
- Workspace ONE
- Zentral
Documentation on the new sync adapters is available here.
Caution
If you have existing assets, you VERY LIKELY want to CHECK the "Match vendor hosts to existing assets by serial number" box. Skipping that part will create duplicate assets, since your vendor's ID hasn't yet been stored in our system.
In testing this, the most common mixup people have when things aren't syncing as expected is that the asset tag template field was filled in with potentially non-unique variables. Check your logs when you first start to play around with this and adjust as needed.
If we're missing one that makes sense for us to add, just open a feature request and we'll take a look.
🎛️ Non-Admin Dashboard
The dashboard was admin-only for as long as anyone can remember. That's no longer the case. Anyone who can manage at least one type of checkoutable item (assets, accessories, licenses, consumables, or components) or users now gets a dashboard tailored to what they're allowed to see:
Users who don't have permissions will still get redirected to their individual profile where they can only see their own items.
🗓️ Unified Calendar
People have been asking for this for nearly a decade, and it's finally here. We have a new top-level /calendar page that shows every scheduled event Snipe-IT knows about in one place: asset audits, expected checkins, EOL and warranty expirations, license expirations and terminations, user end dates, maintenances, and reservations. A "Today" widget on the dashboard pulls the same feed for a rolling 7-day preview so you know what's coming as soon as you login, and can drill down through "type" selectors on the calendar page itself.
Similar to the non-admin dashboard, users will only see this new icon/page if they have the ability to manage actions or items where we log a calendar event.
🛎️ Requestables Overhaul
Big changes in the checkout-request workflow:
- Reservation windows. Requests can carry a start and end date, and those windows show up on the unified calendar. Click a reservation event, get the pre-filled fulfill screen for that specific request.
- Reservations with a start or end date are automatically added to the new calendar
- Quantity is only required on the types where it actually makes sense.
- Calendar events for reservations link to the item's checkout screen
⛙ Asset Model Merge Tool
We knew this was going to be needed, especially with the new sync adapters, since it's very possible to accidentally create new asset models if your mapping isn't just right (marketing model name vs internal model name). This new tool works similar to the user-merge, which lets you pick which is the "real" one, and the "survivor" absorbs the assets and logging of the others.
Screen.Recording.2026-09-23.at.5.18.43.PM.mov
📤 Microsoft Graph mailer
Native support for sending mail through Microsoft Graph, which is the OAuth-based path that Microsoft 365 tenants generally prefer over legacy SMTP AUTH.
💃 OIDC access tokens can hit the API
You can now use OIDC-issued access tokens as bearer tokens against /api/v1. No more workaround of minting a Passport personal-access token separately.
🕹️More Bulk Controls
- Categories bulk edit. Same UX as the assets / licenses / users bulk edit flows we shipped in prior releases.
- Locations bulk edit. Ditto for locations.
🥺Deprecations
maintenance_typestring field on the maintenances API is deprecated. The/api/v1/maintenances/*endpoints now return both the legacymaintenance_typestring AND a newmaintenance_type_detailsobject (id/name/tag_color). Readmaintenance_type_details.namefor the same value going forward. The bare string field will be removed in a future major release.
🎉 Upgrading
Same as always: php upgrade.php from your Snipe-IT directory. Full walkthrough at snipe-it.readme.io/docs/upgrading.
Docs note: we're in the middle of updating the docs to reflect all the new features, screenshots, and changes in this release. If you see something in the app that isn't in the docs yet, that's why. We're working through them.
What's Changed
- Force Manager 'value' to be string (even though it's an integer) by @uberbrady in #19535
- 🖼️ Requestable Items: allow bulk fulfillment, replenish from pending, allow more types of items by @snipe in #19539
- 🎥 Calendar UI by @snipe in #19494
- Fixed #18907 - Change default queue, make all notifications queable. by @uberbrady in #19126
- Add necessary parts to invoke new 'background' queued mail provider by @uberbrady in #19552
- Added location as checkout target for asset history importer by @snipe in #19553
- Bumped Boost from v2.5.4 to v2.6.0 by @marcusmoore in #19554
- Cap the calendar backfill to 2000 rows per model source by @snipe in #19557
- Email Notifications: Made Asset Image size responsive by @Godmartinz in #19561
- Testing: Allowed tests to be run in parallel by @marcusmoore in #19565
- Fix backup restoration when using a unix socket by @NyCodeGHG in #19558
- Added support for sending mail via Microsoft Graph by @SBCV-apegram in #19574
- Docker: Allow for overriding of specific apache limits by @misilot in #19576
- 🎥 Locations: Add bulk edit, improve bulk delete by @snipe in #19577
- Tighten up the default configuration for Trusted Proxies. Added Tests. by @uberbrady in #19578
- API Transformers: Check individual rows, not just general permissions by @snipe in #19579
- Added orphaned file checker console command - Fixed #8898 by @snipe in #19582
- Acceptances: Delete pending acceptances when checking in accessory via API by @marcusmoore in #19580
- Bumped Boost to v2.7.0 by @marcusmoore in #19581
- a11y: Added sr-only on non-tabbed tables by @snipe in #19585
- Locations View: Fixed duplicated icon and crossed results by @snipe in #19586
- Fixed #18260 - informal variants of locales returned wrong plural translations by @snipe in #19587
- Tests: Slightly improve testing speed by @marcusmoore in #19583
- 🖼️ Importer cleanup and add skip nulls by @snipe in #19588
- Clean up unreachable code (via phpstan) by @snipe in #19589
- Fix double rollbars by @snipe in #19590
- Removed unused label constants by @snipe in #19591
- Fixed phpstan complaining about
env()outside of config files by @snipe in #19592 - Fixed phpstan “will always evaluate to true” errors by @snipe in #19593
- Add more relations to delete console command by @snipe in #19599
- Fix missing company creation modal by @MatheusGarvao in #19600
- Change the 'default' queue back to 'sync' :/ by @uberbrady in #19604
- Improve deployment notes for Claude by @uberbrady in #19607
- Unified all modals into blade components by @snipe in #19610
- add TZe_241_B by @Godmartinz in #19611
- Bump crowdin/github-action from 2 to 3 by @dependabot[bot] in #19596
- Update AssetModelsController docblocks for route model binding by @darkdi in #19594
- API: Fixed sorting by order_number in components endpoint by @marcusmoore in #19613
- Wrong format for <img tag in checkin emails by @andreaci in #19623
- Labels: Fixes Default label values from being nulled when switching Label Engines by @Godmartinz in #19619
- Added “clone” permission gate by @snipe in #19631
- Read SCIM group members as ids instead of hydrating User models by @marcusmoore in #19634
- Update to the latest (patched) laravel-scim-server by @uberbrady in #19645
- Bumped Boost to v2.8.1 by @marcusmoore in #19632
- Fixed stale pending acceptances from various scenarios by @marcusmoore in #19555
- Notifications: Fixes #19532 Accepted and Declined notifications are sent to CC emails only by @Godmartinz in #19637
- Optional OIDC bearer-token authentication for the API by @rodchristiansen in #19378
- Yank out stray \Log::error() lines - whoops! by @uberbrady in #19660
- Upgrade Livewire to 4.3.3 by @uberbrady in #19406
- Notifications: [FD-57297] Fixes Asset Checkout, Add tests for checkout and checkin webhook notification payloads by @Godmartinz in #19655
- 🖼️ Added Fleet, InTune, Unifi, Addigy, etc RMM/MDM sync adapters by @snipe in #19628
- Better handle incomplete checkouts for non-users by @snipe in #19666
- Acceptances: Fixed accepting and declining components by @marcusmoore in #19665
- Labels: adds Dymo Labelwriter_30330 by @Godmartinz in #19663
- Labels: Fixes #19515 the way the QR text is handled from legacy to New Label Engine by @Godmartinz in #19633
- Add checked out to in checkin forms by @snipe in #19678
- Fix for unused custom fields being populated by @uberbrady in #19627
- Drop the dead duplicate depreciation_min string by @darkdi in #19673
- Fixed: Preserve literal angle brackets in info-panel notes by @mrjcap in #19676
- Added more info to checkin pages by @snipe in #19683
- Fix ABM pagination: read meta.paging.nextCursor, not links.next by @bjhinkle in #19686
- Fixed #19518 - added support for SASL LDAP by @snipe in #19556
- Labels: [FD-56300] add support for 1D barcode to zebra 18939 by @Godmartinz in #19679
- Implement PHPStan result caching in GitHub Actions by @staabm in #19668
- Added Ubuntu Landscape adapter by @snipe in #19692
- 🎥 Fixed #19690 - Added model merge from asset model index by @snipe in #19695
- 🎥 Added adapters to settings index filter box by @snipe in #19697
- Added help text for Iru/Kanji and renamed the adapter by @snipe in #19698
- Clean up sync adapter rows on soft-delete and purge by @snipe in #19699
- Fixed #19694 - add more built-in fields to AxM adapter by @snipe in #19700
- Fixed #19693 - added apple’s built in MDM for AxM adapter by @snipe in #19701
- Bulk Checkout: [FD-57246] Fix Select2 Enter handling before AJAX results load by @Godmartinz in #19702
- 🎥 Improved custom http adapter UI field mapping, adding more logging by @snipe in #19703
- 🎥Compact extra vendor fields into dropdown widget by @snipe in #19704
- Fixed #19670 - better handle S3 files consistently by @snipe in #19706
- Better handle detaching groups and users on delete by @snipe in #19711
- Fixed RB-22033 - Google SSO callback 500 when the callback URL is hit without a code by @snipe in #19713
- Better trap transport errors in cli and cron by @snipe in #19714
- Docker: Enable OPcache in Alpine Docker images by @danez in #19712
- Switch to blade component for callout on checkout by @snipe in #19716
- Categories: Added bulk edit to index by @snipe in #19723
- Fixed #12190 - Dashboards for non-admins by @snipe in #19728
- Notifications: Fixed cc emails silently failing by @marcusmoore in #19730
🤘Security Rockstars
We've fixed 59 security issues in this release, thanks to the work of these diligent folks who are working every day to keep open source safer for everyone through responsible disclosure and collaboration:
- @0xcelien
- @QwesiRED
- @arpitjain099
- @baeseungwon1010 (배승원)
- @christopherfi-dev
- @kaizhi888
- @pavelkohout396
- @PizzaStev3
- @rajivraj
- @isanghyeon
- @tao0845
- @tonghuaroot
- @W1nterFr3ak
- @d3do-23
- @wolvenspud
- @manus-pi
- @manus-use
New Contributors
- @NyCodeGHG made their first contribution in #19558
- @SBCV-apegram made their first contribution in #19574
- @MatheusGarvao made their first contribution in #19600
- @darkdi made their first contribution in #19594
- @mrjcap made their first contribution in #19676
- @bjhinkle made their first contribution in #19686
- @staabm made their first contribution in #19668
- @danez made their first contribution in #19712
Full Changelog: v8.7.2...v8.8.0