Release Info

Development Version!

Commit: d7f18b30be8b91d72883307c7fe47276015de2ef Date: 2024-04-19T16:12:21+02:00
Changes since last release:
### deploy - Fix default maintenance_page_status_page_url - Rework, Debian-12, new dev hosts, basic-auth, and more ### legacy - fix: loosing of accessories selection on model save ### zhdk-inventory - More flexible inventory-deploy - Rework, dev hosts, basic auth, clean-up - Switch from git-crypt to transcrypt - WIP, new dev hosts, basic auth, more ...
Current Release


  • feat: optimize model search filter
  • fix: overbooking of expired reservations
  • fix: css bug in model search filter


  • chore: create associated entities for new pool triggers


  • feat: inventory: show description in room select list
  • fix: loosing of accessories selection on model save


  • chore: disable basic-auth for token authentication
Previous Releases

Leihs 7.4.0


  • chore: drop legacy audits link


  • fix: migration to enforce a standardized format (procurement_attachments.metadata / json)
  • chore: db / drop audits


  • chore: small correction of erm


  • fix: exclude checkbox field from helper and expert search
  • fix: duplicate groups in hand over calendar
  • chore: drop audits


  • feat: Improve SSO sign-out


  • fix: migration to enforce a standardized format (procurement_attachments.metadata / json)
  • fix: next-jdbc & honeySql (casts / fetch procurement_requests)
  • fix: procure-icon requests (uuid)

Leihs 7.3.2


  • fix model attachment download


  • fix: Change external_session index, fixes #1642
  • fix: merge and prevent duplicate buildings

Leihs 7.3.1


  • fix: remove .ansible clean-up from within ansible

Leihs 7.3.0


  • feat: redirect to home after sso logout (fix browser download popup)
  • feat: rework SSO, add external triggerd SSO sign-out
  • fix: remove node assert dependency


  • feat: redirect to home after sso logout (fix browser download popup)
  • feat: rework SSO, add external triggerd SSO sign-out
  • feat: optimize menu section and user settings


  • feat: add external_session_id to user_sessions


  • feat: redirect to home after sso logout (fix browser download popup)
  • feat: rework SSO, add external triggerd SSO sign-out


  • feat: redirect to home after sso logout (fix browser download popup)
  • feat: rework SSO, add external triggerd SSO sign-out


  • chore: adjustments zhdk-aad
  • chore: add config for zhdkaad authentication

Leihs 7.2.0


  • shared-clj: fix: close next datasource
  • shared-clj: fix: graphql & audits
  • fix: wrap-tx only when unsafe method or graphql mutation
  • chore: Trasactionalize external authentication
  • chore: Exclude user images from auditing


  • shared-clj: fix: close next datasource
  • fix: suspended_until
  • fix: cast uuid for images
  • fix: wrong initial order of cart items
  • fix: show timeout max minutes as configured
  • fix: wrap-tx only when unsafe method or graphql mutation
  • fix: Exclude user images from auditing
  • chore: perf: total reservable quantities on edit reservations
  • chore: perf: refresh timeout without quantities
  • chore: Trasactionalize external authentication


  • feat: add is_archived for procurement_templates
  • chore: Exclude user images from auditing


  • chore: Exclude user images from auditing


  • shared-clj: fix: close next datasource
  • shared-clj: fix: graphql & audits
  • fix: wrap-tx only when unsafe method or graphql mutation
  • chore: Trasactionalize external authentication
  • chore: Exclude user images from auditing


  • shared-clj: fix: close next datasource
  • shared-clj: fix: graphql & audits
  • fix: wrap-tx only when unsafe method or graphql mutation
  • chore: Trasactionalize external authentication
  • chore: Exclude user images from auditing


  • feat: archive templates
  • shared-clj: fix: close next datasource
  • shared-clj: fix: graphql & audits
  • fix: wrap-tx only when unsafe method or graphql mutation
  • chore: Trasactionalize external authentication
  • chore: Exclude user images from auditing

Leihs 7.1.1


  • fix: suspended_until

Leihs 7.1.0


  • feat: add new setting public_image_caching_enabled
  • chore: extend available http-server parameters


  • feat: show cart expiration warning in top nav
  • fix: better timeout
  • fix: calendar loading indicator positioning
  • fix: send to delegated_user than to delegator_user
  • fix: wrong email template for submitted
  • chore: enable image caching
  • chore: optimize broken reservations in refresh timeout


  • feat: add new setting public_image_caching_enabled
  • fix: tables in binary dumps; use UTC for sql dumps
  • chore: exclude user images from auditing


  • chore: improve reverse-proxy cache


  • fix: default splash image path

Leihs 7.0.1


  • delete empty orders trigger after update reservations


  • fix: wrong email template for submitted


  • fix: execute script role
  • fix: backup script


  • fix: manage css in splash layout
  • fix: delete empty orders trigger after update reservations
  • fix: root path on release page

Leihs 7.0.0


  • fix: broken search in audits
  • fix: Set proper initial table default values when creating a user
  • chore: remove hidden password fields


  • feat: explain order title and purpose
  • feat: remove hidden password fields
  • feat: category side nav
  • feat: add image to model list cards
  • fix: filter out empty rentals
  • fix: show line breaks in purpose
  • fix: use actual end date on the rental reservations
  • fix: progressbar (issue with de localization)
  • fix: support breaks and links in model description
  • fix: availability irt to entitled quantity vs. borrowable quantity
  • fix: filter state
  • fix: #1513 (wrong ‘order for’)
  • fix: show order only when of current profile
  • chore: add home link to 404 page
  • chore: app menu only when needed
  • chore: availability in calendar (redesign)
  • chore: change label of availability filter


  • chore: drop unused tables
  • chore: Upgrade PostgreSQL to version 15; include personas and demo, too
  • fix: delegation responsible user triggers
  • fix: procurement users fks


  • chore: Migrate from PostgreSQL version 10 to 15
  • chore: remove new borrow toggle etc
  • fix: bin/build-release-archive
  • fix: send mails setting


  • chore: update erm diagram
  • chore: remove hidden fields
  • chore: update due to removal of old borrow



  • feat: delete item if not used
  • fix: forgery protection origin check false
  • fix: some routes error
  • fix: booking calendar presenter irt to quantities
  • fix: availability irt to entitled quantity vs. borrowable quantity
  • chore: widen flyout of model select fields
  • chore: widen flyout of autocomplete fields
  • chore: ruby 3.1.4
  • chore: delete old unusable cookies
  • chore: remove unused send mails setting


  • chore: change logic irt disabled smtp


  • fix: empty search results in users search field

Leihs 6.9.1


  • fix: delete old unusable cookies

Leihs 6.9.0


  • fix: running reservations irt not borrowable items


  • fix: ensure workdays for pools trigger
  • fix: contracts unique start date constraint
  • chore: more columns to emails & drop notifications table


  • chore: Rework build env setup
  • chore: Env setup via asdf; dedockerize build; CI conf: asdf, fix PG10, asdf Firefox


  • fix: endless loop for categories
  • fix: running reservations irt not borrowable items
  • chore: use mail service instead of action mailer
  • chore: ruby 3.0.5 (database: 3.1.3)


  • chore: use mail service instead of action mailer


  • chore: use mail service instead of action mailer

Leihs 6.8.1-dev

Leihs 6.8.0


  • feat: move inventory-fields from old admin


  • feat: templates
  • feat: minor ui opt #1484
  • fix: hide nav before user is loaded
  • fix: streamline localization, fixing issues with gsw, es, fr
  • fix: show reservable quantity #1458
  • fix: not borrowable items in running reservations


  • fix: Fix restore
  • fix: Fix (container) deploy, remove global nodejs, see details!
  • chore: Deploy: ruby, updates and clean-up
  • chore: remove legacy fields from proxy conf


  • chore: rails 6.1
  • chore: Upgrade ruby 2.6 -> 2.7; clean-up
  • chore: remove admin engine
  • fix: running reservations irt not borrowable items

Leihs 6.7.0


  • feat: home page image url setting
  • feat: audit graphql mutation requests
  • feat: mail-templates from old admin
  • chore: Improve error response and logging when delete user fails because of fkey constraint


  • feat: add model image slide buttons
  • feat: borrow desktop layout/nav


  • chore: remove admin mail templates


  • fix: replace password check in shared-clj, fixes #1461

Leihs 6.6.1


  • fix: improve error response and logging when delete user fails because of fkey constraint

Leihs 6.6.0


  • feat: show button to unfilter empty users list by role or membership
  • feat: implement buildings from old legacy
  • feat: implement suppliers from old legacy
  • feat: implement rooms from old admin
  • feat: improve password-reset UX: show warning when reset not possible
  • feat: password reset via link
  • fix: audits
  • fix: password token BASE32 variants issue
  • fix: statistics bug #1296
  • fix: enforce admin and system_admin protection, improve user edit form
  • fix: comment about default organization
  • fix: send 404 instead of 500 when removing a user from a group
  • chore: move the User-Home link all the way back
  • chore: expose :sign_up_email_match field of auth system


  • fix: restrict password reset token to base32_crockford
  • fix: data migration 627
  • fix: enforce admin and system_admin protection on users table
  • fix: add missing languages (fr-CH, es)
  • chore: extend audits with tx2


  • fix: execute script playbook
  • fix: increase server URL limit, fixes #1424


  • fix: depaginate delegation member dropdown
  • chore: remove buildings from admin engine, etc.
  • chore: remove audited from models
  • chore: remove suppliers etc.


  • feat: new order status in procurement
  • fix: allow requester to see order status in all phases

Leihs 6.5.0


  • feat: lending terms and contact details
  • fix: send submitted and received mails
  • fix: use session- instead of local-storage


  • fix: view entitlement_groups_users #1418


  • fix: clear browser storage on root page

Leihs 6.4.2-dev

Leihs 6.4.1

new borrow

  • feat: reword and redesign borrow app banner
  • fix: send submitted/received mails
  • fix: improve error ui
  • fix: stable sort order of items in order detail


  • config: enable new borrow and ruby jemalloc for all


  • fix: user page loads very slow (1376)


  • fix: build fixes (npm install / package config)

Leihs 6.4.0


new “borow” app for mobile devices

This release adds a new Leihs Borrow app. Users can now easily reserve items on their mobile devices. Additionally users can set their favorite items, reorder from existing orders and cancel their order if not yet accepted by a lending manager. The new look and feel will soon be adapted for larger devices too. For the time beeing users have possibity to switch back and forth from “classic” or “legacy” Leihs to the new Borrow App. Any feedback to the new Borrow App can be posted as an issue on

For deployment, the config flags that can be set and their defaults are as follows (see deploy/all.yml for details):

  • LEIHS_DEPLOY_NEW_BORROW_APP: no: set to yes to deploy the new borrow app
  • LEIHS_NEW_BORROW_APP_SHOW_NOTICE_IN_LEGACY: yes: if set to yes, and the new borrow app is installed, show a notice with link in the old borrow app
  • LEIHS_NEW_BORROW_APP_SHOW_NOTICE_IN_LEGACY_TEXTS is a map that defines the text for the aforementioned notice for all supported languages


The Documentation to Leihs has been moved to


  • add option to use ruby with jemalloc

Leihs 6.3.1

borrow and lending

  • fix: don’t raise on non-existing reservations
  • fix: remove disable borrow/manage section
  • fix: small sanitize in availability
  • fix: trim whitespace from scanned Barcodes (#1337)
  • fix: log mail delivery setting when running cron tasks (#1355)
  • fix: availability calculation for entitlement-groups when items overbooked (#1354)


  • Facilitate restore from remote file by setting remote_pgbin_restore_path

Leihs 6.3.0


  • feat: request order status/comment
  • fix: improve data loading on dashboard when filtering


  • support Debian 11, remove Debian 9

Leihs 6.2.5


  • Fix python passlib problem on Debian 11
  • start work on Debian 11, remove Debian 9

Leihs 6.2.4


  • Fixes access rights information in case of group access rights (#24)


  • deploy: make time of nightly tasks configurable (#1272)

Leihs 6.2.3


  • fix: Delete entitlements on transfer and delete (#1160)
  • Fix “jimp” issue
  • Fix active users 12 to 14 months stats
  • Stats: fix active users counts, improve page


  • allow user to access delegations contracts (for new borrow)
  • fix logger

Leihs 6.2.2


  • Admins need to do the following after upgrading to this version:
    • database consistency issues regarding Delegations have been fixed. Existing Delegations have been automatically corrected, but they have to be checked and corrected by the respective inventory managers!
    • Delegations without a name get a new name: “CHECK NAME”.
    • Delegations without a responsible user get a prefix like: “CHECK RESPONSIBLE USER: (old name)” and the first member is selected as the responsible user.
    • Delegations without a responsible user and a name get a prefix like: “CHECK NAME, CHECK RESPONSIBLE USER: (old name)” and the first member is selected as the responsible user.


  • fix: exclude empty models from search in hand over (#1119)


  • fix: delegations must have a name and a responsible user
  • fix: delegations can not be responsible user of another delegation
  • fix: audited_request migration now works when requester has been deleted

Leihs 6.2.1


  • fix: add constraint to enforce unique model name

Leihs 6.2.0


  • option to show contact details on customer order (#1090)
  • support ‘order_url’ variable in mail templates (#1096)
  • hand over: show more items and sort by inventory code (#1097)


  • set Node.js version to v14
  • deploy playbook: build everything first

Leihs 6.1.2-dev

Leihs 6.1.1

  • db: fix migration 532
  • deploy: dont require npm to be installed
  • deploy: dont require java to be installed

Leihs 6.1.0

  • feat: configure lending terms to be accepted per customer order (#1079)
  • feat: option to include lenders email adresses in contract document (#1080)


  • feat: show a maintenance page during deploy
  • fix: run full vacuum after DB restore
  • fix: ensure shared-mime-info package is installed
  • fix: script s3-cache-helper

Leihs 6.0.0

In Leihs version 6, the “admin” UI and API have been completely overhauled, along with deep conceptual changes to the management of users and groups in leihs. This enables massive improvements to the functionality that can now be configured using those system-wide users and groups, e.g., assignment of Inventory-Pool roles, Delegations and Entitlement-Groups.

Please make sure to read and understand the following points before upgrading Leihs to version 6.

  • management: the previous setting “make all users customers of this inventory pool” has been replaced by a group-based assignment. Existing configuration is automatically migrated to use the new “All Users” group instead, but inventory pool managers might want to check this settings and perhaps select more appropriate groups.

  • management/admin: the users’ login field is now more strict about the allowed characters: @ and | are forbidden, existing fields containing forbidden characters will be removed.

  • admin: there are many “breaking changes” in general. If you’re running any integrations (API clients), we recommend to first try out the new version on a staging server. Because of the conceptual changes not everything can be simply ported, but in most cases if something does not work anymore, there is now a better way to do it. Please raise an issue if that is not the case for your scenario.

  • admin: new “system admin” role: settings that were previously only editable on the server by the root user can now be set in the admin UI. to use this feature, manually promote at least 1 user account to “system admin”. This user account can then promote others in the admin UI.

    root@leihs-server:~# SYSADMIN_ID="00000000-0000-0000-0000-000000000000" \
      psql -d leihs -c "UPDATE users SET is_admin=TRUE, is_system_admin=TRUE WHERE id='$SYSADMIN_ID';"

    An alternative method that also starts from scratch with safe defaults is to remove all existing admins, then immediately create a new one in the web interface (when no admin exists, the web interface will only show a form which creates a system admin):

    root@leihs-server:~# \
      psql -d leihs -c "UPDATE users SET admin = false, system_admin=false;"
  • deployment: the inventory configuration needs to be adjusted. An example commit with these changes can be seen in the demo hosting repository.

    • copy the declaration of leihs_external_hostname from settings/yourhost.yml to host_vars/yourhost.yml file for this host.
    • make sure the leihs_external_hostname host_vars/yourhost.yml defines the correct external hostname, with no scheme, e.g. leihs_external_hostname: ""
    • make sure that all the other values in config/settings.yml are saved into the settings (see in DB or Admin UI). This will be the case if you have not changed the settings since the last deploy.
    • remove the folder settings

Leihs 5.3.0

  • feat: procure: requests short ID
  • borrow: order title & various migrations
  • borrow: new booking calendar
  • borrow: invalidate ls & block current user now and then
  • borrow: basic visits
  • borrow: template assistant (basic version)
  • borrow: translations

Leihs 5.2.4

  • perf: lending: improve handover scanner performance

Leihs 5.2.3

  • feat: Add secondary_email, admin/users e-mail match, fixes 901, 912, and 913
  • fix: legacy: ui: use new handover-purpose icon in menu
  • deploy: fix: release notes
  • borrow: wip

Leihs 5.2.2

  • feat: add purpose to orderless reservations on handover
  • fix: ui: HandoverAutocomplete positioning

Leihs 5.2.1

  • fix: Extend inventory-pool users/groups role filter with ‘none’ and ‘any’
  • fix: DB schema restricts group roles
  • feat: borrow app: delegations
  • deploy: ruby: bundler flags

Leihs 5.2.0

  • feat: legacy: inventory: categories: expand/close all
  • feat: legacy: cover image for models
  • feat: admin & legacy: expand roles system to groups
  • feat: legacy: search after models in visits
  • feat: Sign up via ext auth
  • feat: borrow app: invalidate cart if conflicts
  • feat: borrow app: model search/filters
  • feat: borrow app: current user show
  • feat: borrow app: pools
  • fix: consider all days for workload
  • fix: legacy: retired items and inactive pools combination
  • fix: performance issues for borrow categories and models
  • fix: procure: display of the accounting fields
  • fix: admin: create mail templates together with pool
  • fix: legacy: maintenance period considers closed days now
  • fix: Some UI improvement and fixes
  • fix: legacy: missing translations and other stuff
  • fix: procure: add missing translations
  • fix: borrow app: fix special per page setting
  • fix: legacy: allow take back for user without access
  • fix: admin: sort pools in menu by name
  • deploy: cleanup, fixes, build cache, Docker
  • chore: borrow: kebab-case keys in data and errors
  • chore: Reconcile SMTP ENV var names; update clj-shared
  • chore: borrow: clean up app-db
  • chore: borrow: boot: exclude js from watch task
  • chore: borrow: move client sources
  • database: pool workday constraint

Leihs 5.1.10

  • feat: Add and mange group_access_rights
  • fix: legacy: fix: scope model’s compatibles in borrow
  • fix: legacy: fix: ui: show linebreaks in model description
  • fix: legacy: fix: error when assigning a retired item
  • fix: legacy: fix week number for contract
  • fix: procure: show only close button for past budget period
  • fix: Admin: fix and spec show inventory_pools_roles (bugs 798, 787)
  • fix: Resurrect inventory export
  • fix: mail: fix logging
  • fix: user with deactivated language
  • fix: DB: make sure “FIRSTNAME LASTNAME” is found in users search
  • chore: database: add procurement organizations constraint
  • chore: shared-clj: return_to inside jwt token
  • chore: database: add foreign key constraints to orders

Leihs 5.1.9

  • fix: ruby security 2.6.6

Leihs 5.1.8

  • feat: Inventory-pool administration, deleted_at, suspensions
  • fix: legacy: reorder reservations for hand over
  • fix: database & deploy: ensure exactly one default language which is active too
  • fix: create workday along with inventory-pool
  • chore: database: index on access_rights on user and pool

Leihs 5.1.7

  • legacy: reservation’s default scope only created_at
  • chore: Add smtp_authentication_type setting

Leihs 5.1.6

  • fix: legacy: deal with reservation_advance_days nil
  • fix: legacy: better error message & audits for assigned items
  • fix: my: password reset email case insensitive
  • deploy: Generalize CI deploy, template settings
  • deploy: export secret in execute script play

Leihs 5.1.5

  • mail: support smtp auth
  • inventory/deploy: add ffzh-prod

Leihs 5.1.4

  • fix: Admin: Extend delete and transfer to include more fkeys

Leihs 5.1.3

  • chore: Convert extended_info to json(b), expose it via admin API and UI
  • deploy: fixes for demo host

Leihs 5.1.2

  • bug: admin: bugfixes
  • deploy: enable mails on ffzh-staging

Leihs 5.1.1

  • bug: legacy: fix approvable vs. submittable reservation
  • feat: Admin: access user/img_digest from the frontend
  • deploy: Support Debian Buster; add container test
  • deploy: ffzh: upgrade to 5.1 fixes
  • chore: Container tests: increase prepare timeout

Leihs 5.1.0

  • bug: legacy: missing validation for reservation advance days
  • bug: legacy: label for audits options
  • bug: global navbar issues
  • feat: Audits: new tables, stored procs, triggers, enabled for new admin scope, no UI yet
  • feat: password reset via email
  • feat: Support ext auth sign-out callback
  • feat: admin: archiving audits
  • feat: my: sign-in-ui: only show password input if usable
  • feat: legacy: Revert “make some settings readonly”
  • feat: inventory: csv export: add Delegation user info if borrowed
  • feat: legacy: change attachments field permissions
  • chore: deploy: demo: reset dump playbook
  • chore: deploy: Improve systemd service definitions
  • chore: deploy: Replace http shutdown with pid shutdown

Leihs 5.0.4

  • feat: legacy: maximum reservation time
  • feat: procure: improve filter UX
  • fix: non-deterministic group allocation in availability
  • fix: legacy: mails and users with no language
  • fix: legacy: find and load also empty attachments
  • fix: legacy: migrate attachments add constraints
  • fix: procure: fix filter when loosing inspector rights
  • deploy: chore: remove duplicated config
  • documentation: availability

Leihs 5.0.3

  • feat: Database audits clean-up
  • feat: procure: upload new category image
  • feat: locale handling, translate home and sign-in
  • fix: mails and users with no language
  • fix: Extend api-tokens with system-admin scopes
  • fix: procure: RequestForm supplier_name field
  • fix: legacy: removal of a member of delegation with open reservations
  • fix: legacy: fix: inconsistent delegated user for an order
  • chore: Set up caching via apache for /my and /admin
  • deploy: enable configuring languages

Leihs 5.0.2

  • feat: show quantity in borrow returns
  • feat: sort items by inventory code in inventory
  • feat: support AAI/Switch authentication systems
  • fix: autocomplete for adding items to a package
  • fix: inventory: barcode scanner support for edit package > add item input
  • fix: mail templates migration for empty database
  • fix: manage: create inventory search field only searches when term is given
  • fix: manage: inconsistent delegated user for an order
  • fix: my: show user name as in admin
  • fix: navbar: don’t show sub app if only one app
  • fix: procure: handle if settings are empty
  • fix: procure: presence of 0 for quantities
  • fix: procure: wrong sums for requester
  • fix: procurement: fix request creation
  • fix: redirects
  • fix: release info on the login page
  • fix: sign in: autoFocus the user input field
  • fix: sign-in: dont autocapitalize username (on mobile)
  • translations: admin statistics
  • deploy: add SyslogIdentifier for all systemd services
  • deploy: add caching for build artefacts
  • deploy: db restore vacuum analyze
  • deploy: fix missing services for stop task
  • deploy: fix monit stop/start
  • deploy: fix: add missing secret to legacy cron job

Leihs 5.0.1

We recommend existing instances to wait for v5.1 to upgrade their system (First time installations can use V5.0)

See v5.0.0 for list of breaking changes.


  • Fixed login using password of certain formats
  • Fixed the post-login redirection which did not succeed for some users
  • Fixed broken display of delegation name in global search
  • Improved rendering process to be more resilient

Leihs 5.0.0

We recommend existing instances to wait for v5.1 to upgrade their system (First time installations can use V5.0)

Breaking Changes:

  • The existing LDAP-adapter concept has been replaced by a general leihs authentication-API (Example code available)
  • Modernised internal password hashing - existing passwords are not valid anymore. Managers or Admins need to enter a new password for them.

Rewrite of authentication

  • Possibility to manage Authentication-Systems in Admin section
  • New sign-in UI for internal and external accounts
  • Sign-in via email address or login (username)
  • Modernised internal password hashing - existing passwords are not valid anymore
  • The existing LDAP-adapter concept has been replaced by a general leihs authentication-API (Example code available)

User accounts

  • No fields are mandatory anymore
  • Possibility to create api-tokens for users


  • New Admin-application
  • New API to sync users and groups from an external system
  • New entity “groups”
  • Replaced: Manage users
  • Replaced: Manage Delegations Rewrite and redesign of the delegations page in Admin section


  • Rewrite of the Procurement app (German only at the moment)
  • Can be used on mobile devices
  • New role “Viewer” - only views requests

Leihs 4.19.5

  • fix: orders index for hand over via post

Leihs 4.19.4

  • fix: mail templates migration for empty database

Leihs 4.19.3

  • fix: redirect to root when not logged into procurement

Leihs 4.19.2

  • fix: show textarea for model description and make all of them resizable
  • fix: missing new for software constructor

Leihs 4.19.1

  • fix: quick fix for prod to not loose package children in inventory helper

Leihs 4.19.0

  • feature: better information for entitlements conflicts
  • feature: inventory helper in react
  • fix: labels and titles for create package
  • fix: create model i18n
  • fix: for manage fields in inventory pool show status and target type
  • fix: add more columns to admin quick export
  • chore: create model in react
  • fix: remove deactivation of form fields per user
  • feature: refactor package ui
  • fix: add item properties as columns to quick export

Leihs 4.18.0

  • feature: enable and disable fields per inventory pool
  • feature: quick inventory export in admin
  • fix: sort pools alphabetically for borrow

Leihs 4.17.0

  • feat: send submitted order email
  • feat: improve field editor
  • fix: in field editor if you delete default value then choose another default value
  • fix: add lost styles for timeline again
  • fix: show max 100 results and debounce for autocomplete
  • fix: borrow calendar reload button
  • fix: borrow: set purpose as required field on order submit
  • translation: translate errors in borrow
  • translation: booking calendar translation
  • fix: show timeline in new tab for edit order

Leihs 4.16.1

  • fix: availability & retired items in borrow

Leihs 4.16.0

  • feat: simplify borrow inventory pools list
  • fix: hiding fields in create item was not working anymore
  • fix: dont allow to deactivate required fields in field editor for static fields
  • fix: calendar when max visits not defined
  • fix: ui-datepicker styles
  • fix: translation in borrow pools
  • fix: links in the new timeline
  • fix: show only pools with borrowable items in borrow models index
  • fix: daily view visits links
  • fix: borrow: templates order form
  • chore: refactor and improve performance

Leihs 4.15.0

  • feat: react booking calendar in borrow everywhere
  • feat: admin field editor
  • fix: borrow: deal with undefined max_visits in calendar
  • fix: borrow: templates order form UX
  • fix: simplify borrow inventory pools list
  • fix: more robust settings initializer
  • fix: various things in visits index
  • fix: borrow calendar back button
  • fix: error on templates page with session storage true
  • fix: empty start/end date in session storage
  • fix: show item count per room and inventory codes if less than 100
  • fix: room diff outputs not the items with unknown rooms but unly the unknown rooms
  • fix: make some settings readonly
  • fix: dont allow to deactivate required fields in field editor for static fields
  • fix: hiding fields in create item was not working anymore
  • translation: delete model error message
  • chore: remove paperclip from migrations #3
  • chore: remove inventory_pool_id from entitlements

Leihs 4.14.2

  • feat: new Timeline

Leihs 4.14.1

  • fix: borrow pools index and calendar on models show

Leihs 4.14.0

  • feat: verification filter for visits list
  • fix: rewritten booking calendar in ‘borrow’ section
  • fix: do not use category filter on inventory list for options tab
  • fix: when creating Models, dont save if errors
  • chore: refactor and improve borrow booking calendar
  • chore: container-test: handle missing image alias
  • chore: remove settings singleton

Leihs 4.13.0

  • feat: admin: suppliers: add note, UI improvements
  • feat: improve global search
  • fix: create model validation message for product and version
  • fix: do not show categories on inventory list if options are selected
  • fix: expert search text resources i18n
  • fix: i18n plural ‘Day’
  • fix: license saved message
  • fix: procurement: enhance category/template list UX
  • fix: procurement: validate whole numbers in forms
  • fix: remove filter visibility dependencies in inventory list and show all models after create new model
  • fix: remove paperclip from migrations
  • fix: remove paperclip from migrations #2

Leihs 4.12.0

  • feature: show thumbnail on edit item if attachment is of content type image
  • fix: contracts search must consider contracts purpose too not only orders purpose
  • fix: do not show inactive pools on borrow inventory pools
  • fix: inventory: upload attachments when creating model
  • fix: linkify inventory pool descriptions for borrow
  • fix: model validation of product name and version
  • fix: pools list in borrow section should list pools with borrowable items or contracts
  • fix: text resources for model product and version errors

Leihs 4.11.0

  • feat: logo link in footers, admin-configurable
  • fix: for deleting the last group from user
  • fix: negative general quantity for borrow calendar
  • fix: admin: form labels in settings
  • fix: correct error msg. in hand over
  • fix: Do not validate serial number when creating a package
  • fix: edit license page title
  • fix: improve form handling
  • fix: lending: when adding options to handover, don’t reload availability
  • fix: linkify technical details for license
  • fix: on inventory list show problems for license lines too
  • fix: show all contracts button in global search
  • fix: show contracts from deactivated pools
  • fix: Show retired label and inactive pool on item line in global search
  • refactor: user-session (in DB)

Leihs 4.10.0


  • dont allow to create supppliers on create and edit item forms, disable field supply category
  • fix: always show field inventory_code independent of role
  • fix: inspection label for take back
  • fix: include Software & Licences for take back
  • fix: model availability doesn’t count retired items
  • fix: show existing delegation contact user in swap user dialog
  • fix: use return urls for cancel of edit model etc
  • fix: translations for some create item buttons
  • fix: order list order by created at and group by user

Leihs 4.9.0


  • feat: Display purpose on take back line
  • feat: manage: search contracts by ‘compact_id’
  • fix: add missing key to en_GB for attachment error
  • fix: create item inventory code buttons
  • fix: delayed loading for inventory list search field
  • fix: edit item bugs
  • fix: edit order link from failed approval modal
  • fix: inventory list bugs
  • fix: ‘swap user’ form submission in Safari
  • fix: load package models in chunks to prevent too long urls
  • fix: validation of empty select

Leihs 4.8.0


  • feat: mark groups with too many assignments in red on group overview
  • fix: dont submit ‘swap user’ form when no user is selected
  • fix: hand over dialog autocomplete


  • feat: admin can inspect in all categories
  • feat: only block nav for changed forms
  • feat: refresh button in overview
  • fix: Inspectors can see accounting fields of other categories
  • fix: only show budget limits if configured


  • constraints for orders state and reject reason
  • add reject reason to orders
  • Remove purpose_id from orders

Leihs 4.7.3

  • Fix: Fix closed reservations contract state

Leihs 4.7.2

  • Fix: Redundant contracts in the list

Leihs 4.7.1

  • Fix: Button label for order line and group manager
  • Fix: Filter for verification required and order list
  • Fix: Reject button for orders with many items

Leihs 4.7.0

  • Feature: Disable flexible fields
  • Fix: Do not show location comma, if there is no location
  • Fix: Create item: save button i18n; date format; hide fields functionality
  • Fix: Show version for licenses on inventory
  • Fix: Inventory: edit Options, set inventory code as required
  • Technical: Orders & contracts refactoring
  • Locale: Admin inventory pool 18n

Leihs 4.6.0

  • Feature: inventory: add license version field
  • Feature: inventory: expert search
  • Feature: procurement: accounting type fields
  • Feature: procurement: inline edit request lines in overview
  • Feature: procurement: inspection comments templates
  • Feature: admin: show languages table
  • Feature: render app errors with details
  • Fix: Calendar and csv import translations
  • Fix: don’t crash on inactive dynamic fields
  • Fix: inventory: enable quantity allocations for every license type
  • Fix: inventory: don’t show “Undefined” types
  • Fix: inventory: don’t show location for item-licenses
  • Fix: inventory: image upload restrictions error
  • Fix: lending: for order lines replace buttons dropdown with rejected label after rejection
  • Locale: Add French translation
  • Deploy: Support Debian 9 “stretch”

Leihs 4.5.1

  • Fix: default hash
  • Fix: serialize User.settings
  • Fix: store -> serialize in item.rb
  • Fix: destroy in accept nested attributes
  • Fix: create fields rake task: inactive fields

Leihs 4.5.0

  • Fix: Fix create fields rake task: inactive fields
  • Fix: Fix access rights problems (fixes #283)
  • Fix: Patch image upload
  • Fix: perf: manage: inventory helper: limit autocompletes
  • Fix: Delete unsubmitted orders when deactivating pools (resolves #289)
  • Tech: Upgrade to Rails 5
  • Feat: Case insensitive take back

Leihs 4.4.1

  • Fix: Show item’s location in hand over assign dropdown

Leihs 4.4.0

  • Feature: Search in audits (resolves #256)
  • Fix: Borrow: remove broken links from categories list (resolves #259)
  • Fix: Admin: search for user in admin tab only searches for admins (resolves #166)
  • Feature: Release page + deploy info
  • Feature: Add metadata to files & attachments (resolves #265)
  • Fix: Serial number validation warning in inventory helper (resolves #255)
  • Feature: Change contracts sorting in global search (resolves #242)
  • Documentation: Add owner_id & inventory_pool_id to items
  • Feature: New entity: Rooms (resolves #228)

Leihs 4.3.1

Frontend Bug Fixes

  • Fix: BarcodeScanner: don’t operate on focused inputs
  • Fix: upgrade tooltipster jquery plugin

Leihs 4.3.0

  • Feature: deactive pools (resolves #223)
  • Fix: Forbid first admin user if already exists
  • Fix: Inventory search in location’s room (resolves #221)

Leihs 4.2.0

Inventory Feature and Bug Fixing

Manage section

  • When copying an item, the field “last checked” on the new item is set to the current date

Borrow section

  • The information in the links order, hand over and returns on the top of the page show on the right hand side of the page the date from and date to. Before we showed the dates until or since as f.e. 1970 days since 23.7.2014.
  • The error messages on the top of the page when sending an order were not shown correctly.

Leihs 4.1.0

Adjustments and Bug Fixing

Missing translations

  • When submitting an order in the borrow section in the German part, the success message has now been translated to German.
  • Tab “return” in German part of leihs has now been translated to German

Borrow section

  • The filter settings are not deleted anymore when switching from one category to another

Lending section

  • Feature delegation contracts: When searching for a user, not only his own contracts are shown in the overview but also contracts of delegations, where this user is acting as borrower.
  • Bug fixing: Adding an item or model is not case sensitive anymore. This bug was introduced with the PostgreSQL-Update
  • Bug fixing: It is not possible to lend the same item at the same time to the same user.
  • Bug fixing: Date field when editing the calender in the return page was buggy. Now it is possible to delete the date or type a new date

Manage section

  • Feature duplicate items: If you save an item where the serial-nr. already exists in leihs, you receive a warning asking, if you really want to save. This should help keep your inventory “tidy”.

Admin section

  • The shown time in the Audits-Page has been corrected to show the current time
  • The newest entries in the Audits-Page are now shown on the top

Installing leihs V4

  • Enabling LDAP in V4: How-to-documentation adjusted to enable LDAP under PostgreSQL
  • We now provide the possibility to create the first leihs-Admin-user through a UI
→ Older Releases