Releases: Shelf-nu/shelf.nu
shelf@1.20.0
🏗 Monorepo Migration (Major Change)
Shelf has moved from a single-app repository to a pnpm + Turborepo monorepo.
This improves dependency management, build performance, and long-term scalability.
If you're self-hosting or customizing Shelf, this section matters.
What Changed
- Package manager:
npm→pnpm(v9.15.4) - Commands renamed (see mapping below)
- Database schema moved
- From:
app/database/schema.prisma - To:
packages/database/prisma/schema.prisma
- From:
- Project structure updated
- The Remix app now lives in
apps/webapp/instead of the root
- The Remix app now lives in
🔄 Upgrading
1️⃣ Install pnpm
corepack enable
corepack prepare pnpm@9.15.4 --activateOr install globally:
npm install -g pnpm@9.15.42️⃣ Install dependencies
pnpm installYou can safely delete:
node_modulespackage-lock.json
The monorepo now uses pnpm-lock.yaml.
3️⃣ Start developing
pnpm webapp:dev🔁 Command Changes
| Before (npm) | After (pnpm) |
|---|---|
npm run dev |
pnpm webapp:dev |
npm run build |
pnpm webapp:build |
npm run start |
pnpm webapp:start |
npm run test -- --run |
pnpm webapp:test -- --run |
npm run validate |
pnpm webapp:validate |
npm run lint |
pnpm turbo lint |
npm run typecheck |
pnpm turbo typecheck |
npm run db:generate-type |
pnpm db:generate |
npm run db:prepare-migration |
pnpm db:prepare-migration |
npm run setup |
pnpm webapp:setup |
📁 New Project Structure
shelf/
├── apps/
│ └── webapp/ ← Remix app (was at root before)
├── packages/
│ └── database/ ← Prisma schema, migrations, and client
├── tooling/
│ └── typescript/ ← Shared tsconfig
├── turbo.json
├── pnpm-workspace.yaml
└── .env ← Still at the root
🌱 Environment Variables
No changes required.
The .env file remains at the monorepo root.
🐳 Docker
Official Docker images continue to work.
If you use a custom Dockerfile:
- App entrypoint is now:
apps/webapp/start.sh - It runs:
node ./build/server/index.js - Builds now rely on
turbo prunefor efficiency.
🧩 Custom Prisma Schema Changes
If you modified the Prisma schema, move it from:
app/database/schema.prisma
to:
packages/database/prisma/schema.prisma
Migrations now live in:
packages/database/prisma/migrations/
✨ Features
- feat: redesign Dashboard → Home with Stripe-inspired widget grid by @carlosvirreira in #2350
- feat: migrate to pnpm + Turborepo monorepo by @DonKoko in #2351
🐛 Fixes
🧹 Chores
- chore(deps-dev): bump minimatch from 3.1.2 to 3.1.4 by @dependabot[bot] in #2359
Full Changelog:
https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.19.0...shelf@1.20.0
shelf@1.18.6
🚀 Features
- feat: change default asset index mode to ADVANCED by @carlosvirreira in #2202
- Feat: create inline entities by @DonKoko in #2219
- feat: add saved asset filter presets by @carlosvirreira in #2187
- feat: Filter Kits and Assets by Custody on Locations view by @manish-singh-bisht in #2226
- feat: colored tags by @pj-gridx in #2230
- feat: redesign updates modal as full-page Midjourney-style layout by @carlosvirreira in #2206
- feat(custom-fields): add usage count column to Custom Fields list by @carlosvirreira in #2250
🐛 Fixes
- fix: skip booking time restrictions for admin/owner users by @Copilot in #2223
- fix: filter cookies not working with RR7 single fetch by @DonKoko in #2228
- fix: client-side filter cookie paths and clear functionality by @DonKoko in #2229
- fix(kits): custody card showing for partially checked-in kits by @DonKoko in #2231
- fix(assets): handle deleted assets gracefully in image refresh API by @DonKoko in #2232
- fix(assets): prevent Sentry spam from transient Supabase HTML errors by @DonKoko in #2234
- fix: issue with bookings from and to migration by @DonKoko in #2236
- fix: resolve Select component hydration issue in booking dialog by @DonKoko in #2237
- fix: reverting docker version to node:22 by @DonKoko in #2239
- fix: resolve infinite render loop in CodePreviewDialog by @DonKoko in #2240
- fix: resolve QR code download issue on Safari/iPad by @DonKoko in #2241
- fix: simplify the text of updates learn more link by @DonKoko in #2245
- fix: ensure host headers for React Router CSRF protection in dev mode by @DonKoko in #2254
- fix: include all tags in model filters by @DonKoko in #2255
- fix: downgrade missing thumbnail asset log by @DonKoko in #2256
- fix: set emails footer year to 2026 by @DonKoko in #2257
- fix: remove qrId column from example asset import csv to reduce confusion of users on first import by @DonKoko in #2258
- fix: avoid capturing csv parse errors by @DonKoko in #2259
- fix(auth): show rate-limit signup error by @DonKoko in #2260
- fix(booking): default intent for implicit submits by @DonKoko in #2261
- fix(import): don't capture errors related to non-existent qr codes by @DonKoko in #2263
- fix(asset-import): guard kit and custodian resolution by @DonKoko in #2264
- fix(asset-reminder): skip missing reminders in worker by @DonKoko in #2266
- fix(storage): broaden supabase html error detection by @DonKoko in #2268
- fix(storage): retry signed url on fetch failed by @DonKoko in #2269
⚡ Performance
🧹 Chores
- chore(deps): bump express from 4.21.2 to 4.22.1 by @dependabot[bot] in #2227
- chore(deps): bump jws from 3.2.2 to 3.2.3 by @dependabot[bot] in #2233
- chore: update react and react-dom by @DonKoko in #2235
- chore(deps): bump qs from 6.14.0 to 6.14.1 by @dependabot[bot] in #2249
- chore: bump react-router to fix vulnerability by @DonKoko in #2253
- chore(deps): bump hono from 4.11.3 to 4.11.4 by @dependabot[bot] in #2262
- chore: bump react-router-hono-server to 2.23.0 by @DonKoko in #2270
- chore: skip error capturing for booking conflicts by @DonKoko in #2271
📚 Documentation
- docs: Add OTP length configuration to Supabase setup guide by @Copilot in #2243
🌱 New Contributors
- @manish-singh-bisht made their first contribution in #2226
- @pj-gridx made their first contribution in #2230
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.18.5...shelf@1.18.6
shelf@1.18.5
🚀 Features
- feat: relink qr code action for kits by @DonKoko in #2189
- feat: implement logMissingFormIntent to improve logging of errors on the booking page by @DonKoko in #2204
- feat: asset Empty State Styling Consistency by @carlosvirreira in #2201
- feat: location quick actions by @DonKoko in #2207
- feat: add meta titles to all page routes for accessibility by @DonKoko in #2212
🐛 Fixes
- fix: styling of updates popover and font-sizes in markdown editor and viewer by @DonKoko in #2192
- fix: resolve React 19 + react-zorm incompatibility in asset custom fields by @DonKoko in #2193
- fix: upload handler issue related to new react-router api by @DonKoko in #2194
- fix: booking navigating with command palette by @DonKoko in #2195
- fix: add key to the hidden fields by @DonKoko in #2196
- fix: handling adding assets and kits to ongoing bookings via scan-assets route by @DonKoko in #2200
- fix: surface detailed upload errors across different image uploaders by @DonKoko in #2203
- fix: permissions for adding assets to location via quick actions by @DonKoko in #2208
- Fix: linting issues by @DonKoko in #2197
- fix: handleActivationKeyPress only triggers when the element itself is focused by @DonKoko in #2210
- fix: issue with cancelScheduler not being called in some cases when deleting a booking by @DonKoko in #2213
- fix: formatAbsoluteDate handling of Date objects by @DonKoko in #2217
- fix: handling of supabase error responses when creating a signed url by @DonKoko in #2218
- fix: adjust how advanced index description column displays preview and tooltip content by @DonKoko in #2220
🔧 Refactors
- refactor: hide mobile app installation prompt by @carlosvirreira in #2191
🧹 Chores
- chore: update to rr7 by @DonKoko in #2171
- chore(deps): bump @sentry/node-core and @sentry/react-router by @dependabot[bot] in #2198
- chore(deps): bump @sentry/node and @sentry/react-router by @dependabot[bot] in #2199
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.18.4...shelf@1.18.5
shelf@1.18.4
🚀 Features
- feat: implement editor v2 and address review feedback by @carlosvirreira in #2130
- feat(email): allow SMTP configuration without authentication by @DonKoko in #2160
- feat(accessibility): improve accessibility to better align with WCAG 2.1 AA by @DonKoko in #2164
- feat: add Taiwanese Dollar currency support by @carlosvirreira in #2168
- feat: add CSV export loaders for note activity by @carlosvirreira in #2147
- feat: display asset tags changes in asset activity notes by @DonKoko in #2179
- feat: nested locations by @DonKoko in #2175
- feat: add Romanian Leu (RON) to Currency enum and migration by @ioan-paulniculae in #2182
- Feat: asset notes for name, description, category & valuation change by @DonKoko in #2185
🐛 Fixes
- fix(booking): ensure BASE/SELF_SERVICE users can create bookings from asset index by @DonKoko in #2161
- fix(booking): ensure current custodian is visible in edit form by @DonKoko in #2162
- fix(dropdowns): mobile z-index of asset page dropdowns by @DonKoko in #2166
- fix(responsiveness): broken layout of accept-invite route on mobile devices by @DonKoko in #2167
- fix: ensure custodian always appears in booking form select by @DonKoko in #2173
- fix: correct "Add to Calendar" button path to resolve 404 by @Copilot in #2177
- Fix: test warnings in npm test by @DonKoko in #2186
🔧 Refactors
- refactor: improve error message when adding assets in custody to kit by @DonKoko in #2159
- refactor: make booking.from and booking.to required on db level by @DonKoko in #2183
🧹 Chores
- chore: prep app for Remix v3 future flag behaviors by @DonKoko in httpsgithub.com//pull/2157
- chore(deps): bump glob from 10.4.5 to 10.5.0 by @dependabot[bot] in httpsgithub.com//pull/2181
🧪 Tests
- test: improve test coverage for notes helper functions by @DonKoko in httpsgithub.com//pull/2188
🌱 New Contributors
- @ioan-paulniculae made their first contribution in httpsgithub.com//pull/2182
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.18.3...shelf@1.18.4
shelf@1.18.3
What's Changed
🚀 Features
- feat: reveal overflow asset tags with tooltip by @carlosvirreira in #2126
- feat: show placeholders for missing asset table values by @carlosvirreira in #2122
- feat: custom field deletion by @DonKoko in #2113
- feat: allow paid workspaces to hide label branding by @carlosvirreira in #2114
- feat: refresh signup welcome and plan selection flow by @carlosvirreira in #2136
- feat: surface last updated timestamps in asset index by @carlosvirreira in #2144
- feat: validate numeric custom fields during import by @DonKoko in #2152
- feat(env): allow empty on env vars by @DonKoko in #2153
🐛 Fixes
- fix: allow booking extension when returned assets have conflicts by @DonKoko in #2127
- fix: prevent assets from staying checked out after overlapping booking completion by @DonKoko in #2128
- fix: resolve Chrome date parsing error in location overview by @DonKoko in #2132
- fix(bookings): resolve kit scanning validation failure on scan-assets… by @DonKoko in #2135
- fix: resolve select-all bug with filters in advanced mode by @DonKoko in #2139
- fix: correct URL encoding issue in advanced syntax detection by @DonKoko in #2140
- fix(filters): add withoutValueItem support to DynamicSelect and fix some SQL issues by @Copilot in #2138
- fix: make SortBy control responsive on mobile by @carlosvirreira in #2142
- fix(booking): prevent kit row image from shrinking on mobile by @DonKoko in #2151
- fix: autocomplete hints in login form by @null-dev in #2154
🧹 Chores
- chore: improving tests by adding reason for why each mock is created by @DonKoko in #2125
- chore(deps-dev): bump happy-dom from 20.0.0 to 20.0.2 by @dependabot[bot] in #2120
- chore(deps): bump playwright and @playwright/test by @dependabot[bot] in #2131
- chore(deps-dev): bump vite from 5.4.20 to 5.4.21 by @dependabot[bot] in #2133
- chore(deps): bump hono from 4.10.1 to 4.10.2 by @dependabot[bot] in #2141
- chore: bump react-router-hono-server to 1.2.0 by @DonKoko in #2143
- chore: bump react-router-hono-server to 1.2.1 by @DonKoko in #2149
- chore(deps): bump hono from 4.10.2 to 4.10.3 by @dependabot[bot] in #2145
⚡ Performance
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.18.2...shelf@1.18.3
shelf@1.18.2
Release 1.18.2
🚀 Features
🧩 Refactors
- refactor: Accessibility sprint #1 by @Copilot in #2066
- refactor: remove timestamp from duplicated assets name by @DonKoko in #2117
🐞 Fixes
- fix: prevent barcode scan redirect when feature disabled by @DonKoko in #2103
- fix: apply filters when exporting assets with select all by @DonKoko in #2110
- fix: create entry links on asset form by @DonKoko in #2116
- fix: admin dashboard user route not loading when premium features are disabled by @DonKoko in #2121
- fix: missing cancel button on kits form by @DonKoko in #2123
- fix: include all custom field values in asset search by @DonKoko in #2124
🧹 Chores
- chore: update claude.md and agents.md with information about conventional commits by @DonKoko in #2102
- chore: reinstate commitizen configuration by @DonKoko in #2106
- chore: add detailed type reference table to commit message validation by @DonKoko in #2109
- chore: improve failed commit message by @DonKoko in #2112
- Bump happy-dom from 15.11.7 to 20.0.0 by @dependabot[bot] in #2107
📝 Documentation
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.18.1...shelf@1.18.2
shelf@1.18.1
🧾 What’s Changed
🚀 Features
- Enhance onboarding flow with business intelligence fields by @carlosvirreira in #2058
- Feat: Display user business intel in admin dashboard by @DonKoko in #2074
- Feat: Show returned badge on closed bookings by @carlosvirreira in #2092
- feat: enhance asset notes with markdoc tags by @DonKoko in #2094
🧹 Improvements
- improvement: better logging for generateThumbnailIfMissing by @DonKoko in #2089
- Refine bookings creation page layout by @DonKoko in #2091
- Handle command palette links for registered and NRM members by @carlosvirreira in #2086
- Update: Replace login picture by @DonKoko in #2073
- Throttle bulk invite email dispatch by @DonKoko in #2088
- Handle Supabase duplicates when refreshing asset thumbnails by @DonKoko in #2090
🐛 Fixes
- fix: stabilize command palette search results by @carlosvirreira in #2052
- Fix booking scan redirect and asset-only submissions by @carlosvirreira in #2069
- fix: missing save button on asset form on mobile by @DonKoko in #2070
- fix: bug on user page in admin dashboard by @DonKoko in #2081
- Fix camera fallback for iOS standalone scanner by @carlosvirreira in #2082
- fix: issue with createScanNote logging user name when it shouldn't by @DonKoko in #2093
- Fix reminders search default value on asset page by @DonKoko in #2095
- Fix calendar booking dialog missing custodian default by @DonKoko in #2097
- Fix: asset status badge showing wrong booking when asset is partially checked in by @DonKoko in #2098
- Fix OTP login organization cookie by @DonKoko in #2101
🔒 Security
- Restrict user queries to required fields by @DonKoko in #2071
- Restrict booking extension permissions by @DonKoko in #2075
- Guard quick check-in against conflicting bookings by @DonKoko in #2077
🧠 Chores & Refactors
📦 Dependencies
- Bump tar-fs from 2.1.3 to 2.1.4 by @dependabot[bot] in #2067
- Bump nodemailer from 6.10.1 to 7.0.9 by @dependabot[bot] in #2096
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.18.0...shelf@1.18.1
shelf@1.18.0 - Kit locations, Bookings acitivy logs, Tracking custom field changes and many more
🚀 Features
- Feature/kit location by @rockingrohit9639 in #1961
- Feat: Store changes to custom fields values in asset notes by @Copilot in #2030
- Add location overview tab and valuation aggregation by @carlosvirreira in #2042
- Feat: Add QR code ID display customization feature by @DonKoko in #2053
- Feat: Create activity log for bookings by @Copilot in #2047
- Add confirmation dialog before canceling bookings by @DonKoko in #2063
🐛 Fixes
- fix: node version in package.json to point to 20.x by @DonKoko in #2034
- fix: bug with undefined asset in asset form by @DonKoko in #2035
- Fix partial check-in progress display for COMPLETE and ARCHIVED bookings by @DonKoko in #2041
- Fix self-service asset pagination counts by @carlosvirreira in #2038
- Fix: Filename Sanitization - Content-Disposition Header Issue by @DonKoko in #2056
- Fix custom field link alignment and ref handling by @carlosvirreira in #2057
- Fix: Guard asset/kit custody assignment by organization by @carlosvirreira in #2054
- Fix multiple critical cross-tenant security vulnerabilities by @DonKoko in #2060
♻️ Improvements & Refactors
- Improve inventory value chart responsiveness by @carlosvirreira in #2055
- Improve SAM ID scanner handling and tests by @DonKoko in #2065
- Refactor team member lookups to use service helper by @DonKoko in #2061
🔧 Chores
- chore: add agents.md by @DonKoko in #2044
- chore: improve performance of useApiQuery tests by @DonKoko in #2059
📦 Dependency Updates
- Bump vite from 5.4.19 to 5.4.20 by @dependabot[bot] in #2031
- Bump hono from 4.9.4 to 4.9.6 by @dependabot[bot] in #2019
- Bump hono from 4.9.6 to 4.9.7 by @dependabot[bot] in #2033
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.17.2...shelf@1.18.0
shelf@1.17.2
What's Changed
- [Feature request]: BGN to list of currencies by @Copilot in #2025
- fix: make sure validateNonSSOSignup checks for DISABLE_SSO by @DonKoko in #2026
- fix: broken link on kits availability index by @DonKoko in #2027
- refactor: remove redundant custody extraInclude in kit loader by @DonKoko in #2028
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.17.1...shelf@1.17.2
shelf@1.17.1
Shelf.nu v1.17.1 Release Notes
Features
Kit Management
- Feature/kit categories by @rockingrohit9639 in #1911
- Feature/add to kit from assets index by @rockingrohit9639 in #2000
Booking System
- feat: optional required tags for bookings by @DonKoko in #1927
- feat: show creator details on booking page by @rockingrohit9639 in #1932
- feat(duplicate-booking): create feature to duplicate booking by @rockingrohit9639 in #1934
- Feat: booking max length by @DonKoko in #1928
- feature: broaden search capabilities in booking area by @DonKoko in #1945
- feat(upcoming-booking-column): add toggleable upcoming booking column by @rockingrohit9639 in #1944
- Feature/checked out asset booking by @rockingrohit9639 in #1972
- feat: partial check in & scan to check in: by @DonKoko in #1952
- Feat: In our calendar functionality we have a card made using renderEventCard that shows information about the booking. WE should show information about who created the booking in the same style we are showing the custodian. This should resolve #1978. by @Copilot in #1982
Admin & System Management
- feat: admin tools by @DonKoko in #1926
- Feat: sequential ids by @DonKoko in #1979
- feat: external qr codes support by @DonKoko in #1966
Custom Fields & Data Types
- feat(number-custom-field): create number type custom field by @rockingrohit9639 in #1971
Barcode & Asset Management
- Add EAN-13 barcode support with database migration by @Copilot in #1987
Localization
- Add UGX (Ugandan Shilling) currency support by @Copilot in #1984
- feat: Add location description column to locations index by @Copilot in #1990
Bug Fixes
Kit & Asset Management
- fix: wrong field select for kitId.overview by @DonKoko in #1923
- fix: importing with existing barcodes by @DonKoko in #1959
- Fix: bug with lru cache on import by @DonKoko in #1967
- fix: barcode value normalization during upload by @DonKoko in #1968
- fix: asset index export should include barcodes columns by @DonKoko in #1973
- fixing issue with mapping of EAN13 to EAN-13 by @DonKoko in #2001
- Fix: Add kit-custody conflict validation for asset imports by @DonKoko in #2013
Subscription & Billing
- fix: paused subscription webook by @DonKoko in #1933
- Fix Stripe price filtering and pagination issue by @DonKoko in #2007
Calendar & Scheduling
- fix: calendar not properly controlling view permissions for self service and base users by @DonKoko in #1940
- Fix working hours override date timezone issue by @DonKoko in #2002
- Fix: working hours override date display timezone issue by @DonKoko in #2012
User Interface
- fix: UserBadge styling by @DonKoko in #1936
- fix: mobile actions buttons sizing by @DonKoko in #1943
- fix(generate-booking-pdf): showing generate booking pdf on mobile by @rockingrohit9639 in #1970
Permissions & Access Control
Data Management
- fix: file exports cache issue by @DonKoko in #1938
- Fix sequential ID migration modal state persistence bug by @DonKoko in #1983
- Fix: Set hasSequentialIdsMigrated=true for new personal organizations by @Copilot in #1998
- Bug: sequentialIds break after 9999 by @Copilot in #2004
Improvements
User Experience
- improving tooltips on all bookings indexes by @DonKoko in #1948
- fix(boooking-tag): ordering booking tags by name by @rockingrohit9639 in #1965
Documentation
- update: SSO docs to reflect admin user limitations by @DonKoko in #1963
- Update supabase-setup.md by @dcavacec in #1962
- Improvement: Scanner documentation and consistency by @Copilot in #1996
Technical Updates
Infrastructure & Build
- update: node version to 22 and remix versions by @DonKoko in #1974
- Optimize build process and implement geocoding caching system by @DonKoko in #1976
- Fix pigeon-maps production build import error by @DonKoko in #1977
- Fix Docker build failure by copying prisma.config.ts to release stage by @DonKoko in #1981
- Fix deployment crashes by downgrading Node.js version in Dockerfile by @DonKoko in #2017
Database & Configuration
Development & Tooling
- fix: add vercel rewrites for docs by @DonKoko in #1964
- Update docs config.js by @DonKoko in #1985
- Set up Copilot instructions by @Copilot in #1994
Dependencies
- Bump on-headers, compression and morgan by @dependabot[bot] in #1931
New Contributors
Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@1.17.0...shelf@1.17.1