Open Source Integrated Library System

December 22, 2020

Evergreen community blog

Evergreen Community Spotlight: Debbie Luchenbill

The Evergreen Outreach Committee is pleased to announce that December’s Community Spotlight is Debbie Luchenbill. Debbie is the Associate Director for Open Source Initiatives at MOBIUS and wears many hats in the Evergreen Community.

Debbie started her work at MOBIUS – and her Evergreen Community involvement – in 2012. At that time, her role at MOBIUS was Evergreen Coordinator, and she worked with MOBIUS’s Evergreen libraries providing training, fielding helpdesk tickets, and managing communications. 

Debbie cites the 2013 Conference as a turning point in her community involvement. “I met everyone, and contrary to what I’ve been told, they weren’t scary or judgy!” Debbie says. “I started thinking about how I could be more involved.” Since documentation was part of her job at the time, Debbie started working with the Documentation Interest Group (DIG). She became DIG facilitator in 2019.

“One of my big strengths is leadership, so taking on the DIG facilitation is good because I can bring that organization and regularity to DIG,” Debbie says. In 2020, she also brought those leadership skills to the Evergreen project as a whole and was elected a member of The Evergreen Project Board.

Debbie has also been involved with planning and executing the annual Evergreen International Conference, starting on the Site Selection Committee in 2016 and joining the Standing Conference Committee in 2018. She was also chair of the Local Committee that put on the 2018 Evergreen Conference in St. Charles. Debbie served as a Zoom host for the 2020 Online Conference, and is involved with the forthcoming 2021 Online Conference as well.

If you’ve had a video conference with Debbie, you may have noticed the Wall of Strong Women behind her, representing a portion of her Funko Pop collection. Her favorite is Princess Leia. “I’ve never not known Star Wars,” Debbie says. Her dad took her to see the first movie as a small child. “I’ve spent my entire life wanting to be Princess Leia, because she was a leader in the rebellion – fighting for people, for justice, and a cause she believed in.”

Debbie encourages new Evergreen Community members to get involved with one of the many interest groups and committees. “I think it’s a little easier now because there’s so many committees and interest groups meeting via video,” Debbie observes. “It’s easier when you can see people and know how they’re responding, as opposed to strictly [meeting] in IRC.”

And it is all about the people, Debbie says. “The people make the community!”

Do you know someone in the community who deserves a bit of extra recognition? Please use this form to submit your nominations. We ask for your email in case we have any questions, but all nominations will be kept confidential.

Any questions can be directed to Andrea Buntz Neiman via or abneiman in IRC.

by Andrea Buntz Neiman at December 22, 2020 08:05 PM

December 17, 2020

Evergreen community blog

Mark Your Calendars – The 2021 Conference Is Coming

Mark your calendars because we’re returning for another year of online conference programming in May 2021.  Monday May the 24th will be our pre-conference day and Tuesday the 25th through Thursday the 27th will be our regular programming.  We have a great keynote we are finalizing now and will be releasing details on soon as well as a call for proposals.  So, it’s not too soon to start thinking about topics you would like to share with the community.
We are hoping that between being able to lower ticket prices (not having a physical venue to contend with) and no need to travel that more community members will be able to attend than ever before so also start thinking about who at your institutions might be interested in attending.
Lots of additional details coming soon so stay tuned!

by Rogan Hamby at December 17, 2020 04:12 PM

October 26, 2018

Massachusetts Library Network Cooperative

MassLNC Seeks Consultant to Serve as Interim Project Coordinator

MassLNC is seeking a candidate for a contract position  to serve as an Interim Project Coordinator while the organization seeks a new Executive Director.  The Interim Project Coordinator would be responsible for the management of ongoing software development projects to improve the open-source Evergreen Integrated Library System (ILS).

The contract position is expected to run from November 26, 2018 through the end of March. The contract could be eligible for extension at the end of the original contract period.
View the Request for Proposals for more details on the contract position. 

Interested candidates should send a proposal, including an hourly contract rate, their resume and three references to by the end of the day Friday, November 9, 2018. Questions about this RFP can be sent to  at any time.

Request for Proposals for MassLNC Interim Project Coordinator.pdf71.45 KB

by Kathy Lussier at October 26, 2018 08:38 PM

September 17, 2018


The Equinox Promise: An Open Letter to the Evergreen Community

Update: The Equinox Promise is not just for our Evergreen customers. It applies to our Koha customers as well, and will apply to every open source project that we may offer services for in the future. We at Equinox Open Library Initiative feel it is timely to share an evolving document we call the Equinox Promise. We invite engagement and feedback from everyone, and encourage other vendors to come up with similar statements, or join in on ours. The Equinox Promise In 2007, Equinox Software (which became the Equinox Open Library Initiative in 2017) was founded by a group of dedicated people who believe that open source software offers libraries unheralded opportunities to engage in the process of designing the tools they use. A software company can never speak for the open source communities it serves. But we at Equinox believe we owe our communities a clear statement of our commitments to everyone associated with the Evergreen open source project—whether you are customers of Equinox, Evergreen community members, affiliated vendors, or those who support and champion open source development. We believe in a transparent, open software development process, and we promise to do everything we can to maintain and improve transparency in every part of that process. We believe Evergreen code belongs to the Evergreen community, and we promise to continue to expeditiously release all code to publicly-available repositories. We believe in one single set of code that in the spirit and letter of open source software is free for everyone to download, use, and modify, and we promise that in concert with the community and other development partners, we will work hard to maintain that single code set. We believe we have a responsibility to the Evergreen community to help keep Evergreen open in every way, and we promise we will never agree to hide code we can share. We believe that Evergreen deserves community-based stewardship through foundations, user groups, interest groups, conferences, and similar activities, and we promise to encourage that stewardship in every way we can. We believe that the community is the true voice of Evergreen, and we promise to listen and to share, and to help build and maintain the tools that enable this communication.

September 17, 2018 06:42 PM

Scott McKellar Joins Equinox Software

Equinox Software recently welcomed Scott McKellar as its newest software developer (Laura, you’re no longer the newest!). Scott will help Evergreen, the consortial-quality library automation software used in hundreds of libraries worldwide, continue to grow and meet the needs of current and future users. We interviewed Scott about what brought him to Equinox and the broader Evergreen community. Scott McKellar joins Equinox team What interests you about working for Equinox? 1. Equinox is young enough, and small enough, that it hasn’t accumulated layers upon layers of sclerotic bureaucracy. 2. I sense an appreciation of technical excellence. 3. The product is free software, running on a free operating system. 4. I’ve seen enough of the code that I can see opportunities for improvement, and I can see that it’s worth improving. 5. I can reasonably expect to learn a lot. What’s important about open source software? 1. Freedom for the user — the four freedoms that Richard Stallman never tires of citing. 2. Likelihood of technical superiority, for two main reasons:  When the whole world can see your code, you’re less inclined to be sloppy. Any interested observer can find your mistakes or offer improvements. 3. Lower costs for the user.  Licensing costs are zero, and support costs are at least potentially under pressure from competitors, with low barriers to entry. All of these advantages accrue primarily to the user, not to the vendor.  It isn’t easy to base a business on free software, and I applaud any company that tries.  Like Equinox. Where do you see open source development going in the next ten to fifteen years? Microsft will have trouble surviving the onslaught from Linux, Firefox, Open Office and other open source software.  The next major proprietary software vendor to feel the pressure will be Oracle, under hot pursuit by PostgreSQL and maybe others.  Unlike Microsoft, however, Oracle provides a quality product.  The open source databases will be chasing its taillights for a long time to come. When you get stuck on a problem, how do you solve it? For debugging, I apply the scientific method: formulate hypotheses and then devise experiments to test them. For design, I don’t have any special approach.  I obsess about the problem for a while.  Usually I come up with several different ideas.  Then I look for reasons why they won’t work.  From the survivors I try to pick the best mixture of pros and cons. What do you keep on your desk? When I had conventional office jobs I usually didn’t keep much on my desk, except for loose piles of paper that I had to purge periodically. Now that I’m working from home I have yet to establish a pattern.  Right now my desk in the basement is a mess — littered with the detritus accumulated from years of web surfing, gaming, tinkering, and hacking. What do you do to chill out? Read, listen to music, play mindless computer games, roam the house annoying my daughters — nothing very interesting.  I’m a really boring person [Yeah, right! — Ed.].

September 17, 2018 06:42 PM

June 07, 2018

Massachusetts Library Network Cooperative

MassLNC Seeks Quotes for Geographic Proximity and Patron Note Projects

MassLNC is seeking quotes for two new Evergreen development projects. One project will allow library users to easily find materials that is closest to them by geographic proximity. The other project will make patron record management easier for circ desk staff by consolidating patron alerts, notes, and messages into one interface.

Requirements for the geographic proximity project are available at Requirements for the patron note consolidate project are available at

Developers and companies interested in working on one or both of these projects should submit a quote and project description to  Kathy Lussier at by 11:59 p.m. EDT on Monday, July 9, 2018. All work performed for MassLNC should follow our General Guidelines for Submitting Proposals.

These development projects were selected by the MassLNC Development Committee after reviewing activity on the MassLNC Ideas site and prioritizing those ideas. Many thanks to the MassLNC Development Initiative partners for communicating the needs of their libraries, helping to select the ideas, and working on the development requirements.


by Kathy Lussier at June 07, 2018 05:56 PM

May 02, 2018

Galen Charlton

On being wrong, wrong, wrong

Yesterday I gave a lightning talk at the Evergreen conference on being wrong. Appropriately, I started out the talk on the wrong foot. I intended to give the talk today, but when I signed up for a slot, I failed to notice that the signup sheet I used was for yesterday. It was a good thing that I had decided to listen to the other lightning talks yesterday, as that way the facilitator was able to find me to tell me that I was up next.


When she did that, I initially asked to do it today as I had intended… but changed my mind and decided to charge ahead. Lightning talks are all about serendipity, right?

The talk went something like this: after mentioning my scheduling mix-up, I spoke about how I have been active in the Evergreen project for almost nine years. I’ve worn a variety of project hats over that time, including those of developer, core committer, release manager, member of the Evergreen Oversight Board, chair of the EOB, and so forth. While I am of course proud of the contributions I’ve made, my history with the project also includes being wrong about many things and failing a lot.

I’ve been wrong about coding issues. I’ve been responsible for regressions. I’ve had my share of brown-bag releases. I’ve misunderstood what library staff and patrons were trying to accomplish. I’ve made assumptions about the working conditions and circumstances of users that were very wrong indeed. Some of my bug reports and test plans have not been particularly clear.

Why bring up my wrongness? Prior to the talk, I had been part of a couple conversations about how some folks feel intimidated about writing bug reports or posting to the mailing lists for fear of being judged if their submission was not perfect. Of course, I don’t want people to feel intimidated; the project needs bug reports and contributions from anybody who cares enough about the software to make the effort. By mentioning how I — as somebody who is unquestionably a senior contributor to the project — have been repeatedly wrong, I hoped to humanize people like me: we’re not perfect. Perfection is not a requirement for gaining status in the community as a respected contributor — and that’s a good thing.

I also wanted to give permission for folks to be wrong, in the hopes that doing so might help lower a barrier to participating.

So much for the gist of the lightning talk. People in the audience seemed to enjoy it, and I got a couple nice comments about it, including somebody mentioning how they wished they had heard something like that as they were making their first contributions to the project.

However, I would also like to expand a bit on a couple points.

Permission to be wrong is not something I can grant all by myself. While I can try to model good ways of providing feedback (and get better myself at it; I’ve certainly been wrong many a time about how to do so), it sometimes doesn’t take much for an interaction with a new contributor (or an experienced one!) to become unwelcoming to the point where we lose the contributor forever. This is not a theoretical concern; while I think we have gotten much better over the years, there were certainly times and circumstances where it was very rational to feel intimidated about participating in the project in certain ways for fear of getting dismissive feedback.

Giving ourselves permission to be wrong is a community responsibility; by doing so we can give ourselves permission to improve. However, this can’t be treated as a platitude: it takes effort and thoughtfulness both to ensure that the community is welcoming at all levels, and to ensure that permission to be wrong isn’t accorded only to people who look like me.

One of the things that the conference keynote speaker Crystal Martin asked the community to consider was this: “Lift as you climb.” I challenge senior contributors to the Evergreen project — including myself — to take this to heart. I have benefited a lot by being able to be wrong; we should act to ensure that everybody else in the community can be allowed to be wrong as well.

by Galen Charlton at May 02, 2018 03:26 PM

January 31, 2018

Evergreen Indiana

Weekly Update — January 31, 2018

Committee News

The eContent Committee will meet next on February 13, 2018 at 10am at the Plainfield-Guilford Township Public Library.

The Executive Committee will meet on February 13, 2018 at 1pm at the Plainfield-Guilford Township Public Library. An executive session will precede the public meeting and is anticipated to last approximately 15 minutes.

Migration News

Whiting Public Library’s go-live has been scheduled for Wednesday, March 14, 2018. A modified cataloging freeze is anticipated beginning on Friday morning, March 9, 2018.

2018 Evergreen International Conference Scholarships: Last Call

The 2018 Evergreen International Conference will be held in St. Charles, Missouri, April 30-May 3, 2018. April 30 is the pre-conference. The Evergreen Indiana Executive Committee has authorized a scholarship fund to assist interested staff to attend the conference. The application is now open through February 5, 2018.

Webclient Feature Review Class Update

The webclient feature review class is almost ready for release. Due to the upgrades and fixes integrated since December, there have been enough changes that it has had to be rewritten a couple of times already. The LEUs for all recorded participants have gone out. I anticipate releasing the recording by the end of the week. Thank you for your patience!

Upcoming Evergreen Indiana Training Opportunities

Due to increased interest related to the webclient workflows, the basic series will be offered twice in Q1 2018.
February 5, 2018
Basic Circulation, 9am-12pm, webinar (3 TLEU)
Holds, 1pm-3pm, webinar (2 TLEU)
February 7, 2018
Local Administration and Basic Reporting, 9am-12pm, webinar (3 TLEU)
Basic Cataloging, 1pm-3pm, webinar (2 TLEU)
February 27, 2018
Basic Circulation, 9am-12pm, webinar (3 TLEU)
Holds, 1pm-3pm, webinar (2 TLEU)
February 28, 2018
Local Administration and Basic Reporting, 9am-12pm, webinar (3 TLEU)
Basic Cataloging, 1pm-3pm, webinar (2 TLEU)
March 5, 2018
Advanced Cataloging, Part I, 9am-Noon, webinar. You must register for and attend both parts of the webinar to be eligible for your Cat1 and receive your 6 TLEUs.
March 6, 2018
Advanced Cataloging, Part II, 9am-Noon, webinar. You must register for and attend both parts of the webinar to be eligible for your Cat1 and receive your 6 TLEUs.
April 17, 2018
Fine-Free Libraries – What, Why, and How, 10-11am EST, webinar, Ruth Frasur (HGSTN) and Scott Tracey (WLAFY) presenting.

by admin at January 31, 2018 03:54 PM

January 24, 2018

Evergreen Indiana

Weekly Update — January 24, 2018

Final Visits of the 2017 Tour

The final visits of the 2017 library tour by the support team were completed at the end of November. All told, we visited 163 service locations as part of this tour and had a great time getting to know you and your libraries better. An executive report will be released later this spring together with a full album of the visit cards so that we can share more of the great ideas, programs, and partnerships you celebrate. Thank you all so much for sharing your time, ideas, and libraries with us!

In case you’re interested in tracking where we traveled, there is an interactive map (with links to the full sized profile cards) available: 2017 Tour.

Migration News

Whiting Public Library’s go-live has been scheduled for Wednesday, March 14, 2018. A modified cataloging freeze is anticipated beginning on Friday morning, March 9, 2018.

2018 Evergreen International Conference Scholarships

The 2018 Evergreen International Conference

will be held in St. Charles, Missouri April 30-May 3, 2018. April 30 is the pre-conference. The Evergreen Indiana Executive Committee has authorized a scholarship fund to assist interested staff to attend the conference. The application is now open through February 5, 2018.

Webclient Feature Review Class Update

The webclient feature review class is still undergoing conversion for asynchronous release. We anticipate its release, together with the live class LEUs, by the end of the month. Thank you for your patience!

Upcoming Evergreen Indiana Training Opportunities

Due to increased interest related to the webclient workflows, the basic series will be offered twice in Q1 2018.
February 5, 2018
Basic Circulation, 9am-12pm, webinar (3 TLEU)
Holds, 1pm-3pm, webinar (2 TLEU)
February 7, 2018
Local Administration and Basic Reporting, 9am-12pm, webinar (3 TLEU)
Basic Cataloging, 1pm-3pm, webinar (2 TLEU)
February 27, 2018
Basic Circulation, 9am-12pm, webinar (3 TLEU)
Holds, 1pm-3pm, webinar (2 TLEU)
February 28, 2018
Local Administration and Basic Reporting, 9am-12pm, webinar (3 TLEU)
Basic Cataloging, 1pm-3pm, webinar (2 TLEU)
March 5, 2018
Advanced Cataloging, Part I, 9am-Noon, Webinar. You must register for and attend both parts of the webinar to be eligible for your Cat1 and receive your 6 TLEUs.
March 6, 2018
Advanced Cataloging, Part II, 9am-Noon, Webinar. You must register for and attend both parts of the webinar to be eligible for your Cat1 and receive your 6 TLEUs.

by admin at January 24, 2018 07:39 PM

August 24, 2017

Dan Scott (Coffee|Code) (Evergreen entries)

Our nginx caching proxy setup for Evergreen

A long time ago, I experimented with using nginx as a caching proxy in front of Evergreen but never quite got it to work. Since then, a lot has changed in both nginx and Evergreen, and Bill Erickson figured out how to get nginx to proxy the websockets that Evergreen now needs for its web-based staff client. This spring, as part of my work towards building prototype offline support for the Evergreen catalogue's My Account section, I dug in and started figuring out some of the final pieces that are needed to enable nginx to proxy most of the static content that Apache (with its bloated processes) would otherwise have to serve up, and wrote a configuration generator script for the nginx and Apache pieces. And in July, we went live with the configuration.

This post documents what we currently (as of August 2017) are running on our Evergreen 2.12 server with Ubuntu 16.04. If you have any questions about this or our corresponding Apache configuration, please let me know and I'll attempt to answer them!


This is the core configuration for the nginx server:

proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=1g
                 inactive=60m use_temp_path=off;
proxy_cache_key $scheme$http_host$request_uri;

server {
    listen 80;

    include /etc/nginx/concat_ssl.conf;
    include /etc/nginx/osrf_sockets.conf;

    location / {
        proxy_pass https://localhost:7443;

        rewrite ^/?$ /updates/manualupdate.html permanent;

        include /etc/nginx/concat_headers.conf;
  • The proxy_cache_path directive tells nginx where to store the data it is caching, what kind of directory structure it should create (levels), the name of the shared memory zone to use (keys_zone), the maximum size of the disk cache (max_size), how long to retain a cached copy of the file (inactive), and whether to use the value of the proxy_temp_path directive as a parent directory for the cache.
  • The proxy_cache_key tells nginx to use a combination of the request scheme (typically HTTP or HTTPS), the hostname, and the full request URI (including GET arguments) to store and lookup the cached data. Apache's response tells nginx how long the request should be cached (whether it should expire immediately, or as of #1681095 "Extend browser cache-busting support", cache for a full year for images, JavaScript, and CSS (at least until you run again).
  • We currently include one server directive per hostname that we support, which is quite repetitive. Looking at this with fresh eyes, we should probably simply use something like server_name * to cover all of our hostnames on our domain with a single directive.
  • In this block, we only listen to port 80, which seems odd given that we're an HTTPS-only site. Read on!
  • include /etc/nginx/concat_ssl.conf; keeps all of the TLS-related configuration in one place, including listening to port 443. We'll pry open this file later.
  • include /etc/nginx/osrf_sockets.conf; keeps all of the OpenSRF websockets translator proxy configuration in one place. We'll also pry open this file later.
  • The location / block handles the proxying. At first I was nervous and wanted to proxy the actual hostname instead of localhost to ensure we got the right templates, etc, but it turns out the proxy headers guide the request to the right host. So now I'm relaxed and we simply pass the request on to https://localhost:443. Be very careful with those trailing slashes!


listen 443 ssl http2;
ssl_certificate /etc/apache2/ssl/server.crt;
ssl_certificate_key /etc/apache2/ssl/server.key;

if ($scheme != "https") {
    return 301 https://$host$request_uri;

# generate with openssl dhparam -out dhparams.pem 2048
ssl_dhparam /etc/apache2/dhparams.pem;

# From
ssl_prefer_server_ciphers on;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

There's a fair bit going on here, but it's almost entirely related to TLS support and a lot of the content comes either from the Mozilla TLS configuration generator or from Certbot's configuration plugin for nginx. Perhaps most interesting is the listen 443 ssl http2; line that enables listening on the standard HTTPS port and also supports HTTP/2 for browsers that support it--effectively a way to use a single connection from a browser to a server to issue many parallel requests for resources, amongst other performance enhancements.

We also force any HTTP request to use an HTTPS connection using the if ($scheme != "https") { block.


This is extracted from the sample nginx configuration shipped with OpenSRF:

location /osrf-websocket-translator {
    proxy_pass https://localhost:7682;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # Needed for websockets proxying.
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    # Raise the default nginx proxy timeout values to an arbitrarily
    # high value so that we can leverage osrf-websocket-translator's
    # timeout settings.
    proxy_connect_timeout 5m;
    proxy_send_timeout 1h;
    proxy_read_timeout 1h;


This is not perfectly named; while we do set up the proxy headers in this file, we also include some of the other statements we would otherwise have to repeat inside the server block. Here's what the contents look like:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_cache my_cache;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
proxy_cache_lock on;

rewrite ^/?$ /eg/opac/home permanent;
  • The proxy_set_header directive adds headers to the requests forwarded to Apache, so that Apache can figure out which host was actually requested, accurately log requests (instead of saying everything is coming from localhost), etc. These directives were copied directly from the sample nginx configuration shipped with OpenSRF.
  • proxy_cache tells this server to use the cache we previously named in our keys_zone parameter.
  • proxy_cache_use_stale tells this server to return stale data (if it has a cached copy) if Apache returns an error or a timeout or any of the specified HTTP status codes while trying to fetch a fresh copy.
  • proxy_cache_lock tells this server to, should multiple identical requests for data that needs to be cached or refreshed arrive, only allow a single request to be passed through to Apache and have the other requests wait. This can be one way to avoid the "someone set a book down on a keyboard and caused 100 identical requests in one second" problem.
  • The rewrite simply directs the request for a bare hostname (with or without a trailing slash) to the catalogue home page.

by Dan Scott at August 24, 2017 08:00 PM

August 12, 2017

Dan Scott (Coffee|Code) (Evergreen entries)

Enriching catalogue pages in Evergreen with Wikidata

I'm part of the Music in Canada @ 150 Wikimedia project, organizing wiki edit-a-thons across Canada to help improve the presence of Canadian music and musicians in projects like Wikpedia, Wikidata, and Wikimedia Commons. It's going to be awesome, and it's why I invested time in developing and delivering the Wikidata for Librarians presentation at the CAML preconference.

Right now I'm at the Wikimania 2017 conference, because it is being held in Montréal--just down the road from me when you consider it is an international affair. The first two days were almost entirely devoted to a massive hackathon consisting of hundreds of participants with a very welcoming, friendly ambiance. It was inspiring, and I participated in several activities:

  • installing Wikibase--the technical foundation for Wikidata--from scratch
  • an ad-hoc data modelling session with Jan and Stacy Allison-Cassin that resulted in enhancing the periodicals structure on Wikidata

But I also had the itch to revisit and enhance the JavaScript widget that runs in our Evergreen catalogue which delivers on-demand cards of additional metadata about contributors to recorded works. I had originally developed the widget as a proof-of-concept for the potential value to cultural institutions of contributing data to Wikidata--bearing in mind a challenge put to the room at an Evergreen 2017 conference session that asked what tangible value linked open data offers--but it was quite limited:

  • it would only show a card for the first listed contributor to the work
  • it was hastily coded, and thus duplicated code, used shortcuts, and had no comments
  • the user interface was poorly designed
  • it was not explicitly licensed for reuse

So I spent some of my hackathon time (and some extra time stolen from various sessions) fixing those problems--so now, when you look at the catalogue record for a musical recording by the most excellent Canadian band Rush, you will find that each of the contributors to the album has a musical note (♩) which, when clicked, displays a card based on the data returned from Wikidata using a SPARQL query matching the contributor's name (limited in scope to bands and musicians to avoid too many ambiguous results).

I'm not done yet: the design is still very basic, but I'm happier about the code quality and it now supports queries for all of the contributors to a given album. It is also licensed for reuse under the GPL version 2 or later license, so as long as you can load the script in your catalogue and tweak a few CSS query selector statements to identify where the script should find contributor names and where it should place the cards, it should theoretically be usable in any catalogue of musical recordings. And with the clear "Edit on Wikidata" link, I hope that it encourages users to jump in and contribute if they find one of their favourite performers lacks (or shows incorrect!) information.

You can find the code on the Evergreen contributor git repository.

by Dan Scott at August 12, 2017 08:00 PM

May 22, 2017

Dyrcona's Evergreen Blog

NCIPServer and OpenSRF 2.5+

Thanks to Jason Boyer of Indiana Evergreen, it was brought to my attention that if you use the recommended Apache configuration with NCIPServer, Evergreen, and OpenSRF version 2.5.0 or later, NCIPServer crashes whenever you access its URL with the following error message:

Warning caught during route execution: Use of uninitialized value in scalar assignment at /usr/local/share/perl/5.22.1/OpenSRF/DomainObject/ line 246.

The reasons are a bit arbitrary and technical. The solution, however, is simple. To correct the situation, add the following directive inside the <Location /NCIP/> block in your eg_host.conf:

PerlSetEnv DANCER_ENVIRONMENT "production"

If you're upgrading to Evergreen 2.12 and OpenSRF 2.5, then you need to add the above to your configuration. Even if you are not planning an upgrade in the near future, adding that line will not hurt anything and it will help when you do eventually upgrade. Really, that directive should have been in the recommended configuration from the start, but was ignored owing to an oversight on my part.

The README has been updated to include the addition of the above line for configuration of both Apache 2.2 and Apache 2.4.

by Jason Stephenson ( at May 22, 2017 07:21 PM

October 11, 2016

Galen Charlton

Visualizing the global distribution of Evergreen installations from tarballs

In August I made a map of Koha installations based on geolocation of the IP addresses that retrieved the Koha Debian package. Here’s an equivalent map for Evergreen:

Downloads of Evergreen tarballs in past 52 weeks
Click to get larger image

As with the Koha map, this is based on the last 52 weeks of Apache logs as of the date of this post. I included only complete downloads of Evergreen ILS tarballs and excluded downloads done by web crawlers.  A total of 1,317 downloads from 838 distinct IP addresses met these criteria.

The interactive version can be found on Plotly.

by Galen Charlton at October 11, 2016 02:04 AM

September 29, 2016


New Libraries Everywhere!

In a matter of just a few weeks, we welcomed two new libraries into the Bibliomation family. The Milford Public Library went live on Evergreen on August 18th, and the Babcock Library in Ashford went live on September 23rd. Both of these migrations were completed with the help of Equinox Software, Inc. We have worked with Equinox on other migration projects in the past, and appreciate their expert guidance. We are thrilled to have Milford Public Library, a former Bibliomation member, back in the fold. The staff brings with them a great deal of enthusiasm, and they have taken to Evergreen very quickly.

Milford Public Library staff

Babcock Library has been through many changes lately. Thanks to the leadership of their interim director, Terry Decker, they weathered losing key staff in the midst of the project, and still managed to go live on their target date.

Babcock Library staff

In November, the Burnham Library in Bridgewater will be the final library to join Bibliomation in 2016. Stay tuned for news of their journey!

by biblio at September 29, 2016 05:22 PM

August 05, 2016

Dyrcona's Evergreen Blog

NCIPServer: better_abstraction branch merged into master

The Evergreen ILS driver for the NCIPServer software reached a milestone with the merge of the better_abstraction working branch into the master NCIPServer repository. (NCIPServer is a NCIP version 2.02 responder for processing ILL transactions.) This merge comes after many months of production use with the Massachusetts Commonwealth Catalog.

While this merge marks the end of development on the better_abstraction branch, it is not the end of the road for NCIPServer development with Evergreen. For one thing, NCIPServer needs documentation. The README is just a placeholder. Jason Boyer of Indiana is working on improvements to the request item response messages. Also, we've given up on any pretense of compatibility with Koha, so there is code to be deleted and examples to be updated. Finally, it would be nice to have an installation method better than just copying files into place and manually editing the configuration.

It is recommended that those using the better_abstraction branch in production switch to the master branch of the main repository.

by Jason Stephenson ( at August 05, 2016 02:15 PM

January 19, 2016


Goodbye to Benjamin Shum!


January 19, 2016

Until January 12th, his last day on the job, Benjamin Shum has run the Evergreen system for Bibliomation the entire time we have been on Evergreen. Ben was hired in 2009, when Evergreen was just a plan. In 2010, along with Melissa Lefebvre and Kate Sheehan, Ben rolled Evergreen out to a number of development partner libraries, just joining Bibliomation in their own mini-Evergreen-network. Ben learned so much in that first year, enough to migrate the rest of Bibliomation’s libraries in May/June of 2011. His ability to communicate complex Evergreen functionality to staff and libraries alike made Evergreen a real pleasure for the rest of us to learn. Ben’s work as a core committer in the Evergreen community also helped us stay abreast of all Evergreen developments. His contributions were valued highly. Ben leaves Bibliomation’s Evergreen system in the capable hands of his work partner, Melissa Ceraso.

Good luck to Ben in his future endeavors. We will miss him.

by biblio at January 19, 2016 08:58 PM

September 27, 2014

Evergreen Open Source ILS - Flickr stream

2014-09-26 17.53.29

Evergreen Open Source ILS posted a photo:

2014-09-26 17.53.29

When Vietnamese fails, eat Irish. Hack-A-Way 2014.

by Evergreen Open Source ILS at September 27, 2014 04:07 PM

2014-09-26 17.21.35

Evergreen Open Source ILS posted a photo:

2014-09-26 17.21.35

Notice that there are a lot of pictures of people just working. Hack-A-Way 2014.

by Evergreen Open Source ILS at September 27, 2014 04:07 PM

January 23, 2014

Moving to Evergreen in Niagara

Macros : Receipt Template Editor Variables

Receipt Template Editor Variables


General variables

%LIBRARY%                        Library full name

%SHORTNAME%                  Library Policy Name

%STAFF_FIRSTNAME%         First name of Staff login account

%STAFF_LASTNAME%          Last name of Staff login account

%STAFF_BARCODE%           Barcode of Staff login account

%STAFF_PROFILE%             Profile of Staff login account

%PATRON_FIRSTNAME%      First name of Patron

%PATRON_LASTNAME%       Last name of Patron


%patron_barcode%              Patron Barcode

%TODAY%                           Full Date and time in the format: Wed Sep 21 2011 13:20:44 GMT-0400 (Eastern Daylight Time)

%TODAY_TRIM%                  Date and time in a shorted format: 2011-09-21 13:21

%TODAY_m%                      Two digit Month: 09

%TODAY_d%                       Two digit Day: 21

%TODAY_Y%                       Year: 2011

%TODAY_H%                       Hour in 24 hour day: 13

%TODAY_I%                        Hour in 12 hour format: 1

%TODAY_M%                       Minutes of the Hour: 24

%TODAY_D%                       date in standard US format: 09/21/11

%TODAY_F%                       date in International Standard: 2011-09-21

Additional variables for various slips

Hold Slip

%ROUTE_TO%                     It should say Hold Shelf if it is a hold being fulfilled

%item_barcode%                 Item Barcode

%item_title%                       Item Title

%hold_for_msg%                 Hold for Message: this gives the patron’s Name

%PATRON_BARCODE%         Patron’s Barcode

%notify_by_phone%            Phone number listed in the Hold Database.  This may not be the same s what is in the Patron’s record, as they can list another number when placing the hold.

%notify_by_email%             Email listed in Hold Database.  Same as phone number

%request_date%                  The date that the Request was originally placed.

%formatted_note%              Hold Notes (new to 2.1)

Transit Slip

%route_to%                        Library Policy Name that the item is in transit to

%route_to_org_fullname%    Library Full Name that the item is in transit to

%street1%                          Library Street address Line 1 that the item is in transit to.

%street2%                          Library Street address Line 2 that the item is in transit to.

%city_state_zip%                City, State, Zip of Library the Item is in transit to.

%item_barcode%                 Item Barcode

%item_title%                       Item title

%item_author%                   Item Author


Hold Transit Slip

%route_to%                        Library Policy Name that the item is in transit to

%route_to_org_fullname%    Library Full Name that the item is in transit to

%street1%                          Library Street address Line 1 that the item is in transit to.

%street2%                          Library Street address Line 2 that the item is in transit to.

%city_state_zip%                City, State, Zip of Library the Item is in transit to.

%item_barcode%                 Item barcode

%item_title%                       Item title

%item_author%                   Item Author

%hold_for_msg%                 Hold for Message: this gives the patron’s Name

%PATRON_BARCODE%         Patron’s Barcode

%notify_by_phone%            Phone number listed in the Hold Database.  This may not be the same s what is in the Patron’s record, as they can list another number when placing the hold.

%notify_by_email%             Email listed in Hold Database.  Same as phone number

%request_date%                  Date that the Request was originally placed


Check out

%title%                               Title

%author%                           Author

%barcode%                         Item Barcode

%due_date%                       Due Date in US format with 2.1, International format with 1.6


For type: payment

%original_balance%             The original balance the patron owes

%payment_received%          How much was received from the patron

%payment_applied%            How much of the payment was applied

%payment_type%                What type of payment was applied: IE Cash

%voided_balance%              Any Voided balance

%change_given%                 How much change was given

%new_balance%                  The new balance on the account

%note%                              Any notes on the annotated payment

%bill_id%                            The Id for the bill in the Bill database

%payment%                        How much of the payment that was applied was applied to this title

%title%                               Title that the payment was applied to.

%last_billing_type%             The type of bill that was last charged to the patron for this title

%barcode%                         Item barcode

%title%                               title of item


by nclibraries at January 23, 2014 02:44 PM

August 08, 2013

BOSS: Bibliomation and Open Source Systems

The blog has a new home

This blog has a new home:

We'll be posting about all things Biblio as well as our work with Evergreen. Check it out!

by Unknown ( at August 08, 2013 03:19 PM

May 01, 2013

Tara Robertson

egcon2013: open library ecosystem

egcon2013 website header image by Jon Whipple
egcon2013 design work by Jon Whipple

I just finished chairing the organizing committee for the International Evergreen conference in Vancouver. It’s been more than a year of planning and a labour of love. From our own evaluation and from participant feedback we put on a really excellent conference. Now that I’m caught up on sleep here’s some of my thoughts.

Why this was an awesome  organizing  experience  for me

  • great community – the Evergreen community is awesome. People are kind, hardworking and have a DIY get ‘er done kinda attitude. I don’t write code, so can’t make that kind of contribution to the project, but I am good at event planning. While I’m sure I could organize an event for a group of people I didn’t know, it’s easier and more fulfilling to do this for a community of people I care deeply about.  One of my first jobs out of library school was doing training and support for the Sitka Evergreen installation in BC. I learned a lot and this experience helped me get interesting library technology jobs. I feel grateful for the skills I built and to the people who mentored me. On a personal level it feels good to be able to contribute something back to the Evergreen community.
  • great  organizing  team – This was the second conference that we’ve organized together. I have a lot of respect and admiration for these folks: Anita Cocchia (BCELN),  Caroline Daniels (KPU),  Mark Ellis (RPL),  Mark Jordan (SFU),  Paul Joseph (UBC)  and Shirley Lew (VCC). While Ben Hyman (BC Libraries Coop) wasn’t on the organizing committee he did a stellar job of communicating with and buffering us from the Evergreen Oversight Board and the Software Freedom Conservancy. We all work hard and trust each other. I’ve learned a bunch of soft and hard skills from this group. I enjoyed our group dynamic and loved working together. We were comfortable asking questions and challenging each other. There were a bunch of times i felt like, as a group, we came up with a way better decision than any one of us as individuals would have.

Things that didn’t cost anything and added value

  • We had an amazing team of volunteers who did live note taking as well as helping out stream the technical track. These folks were super enthusiastic and committed. The live notes are written documentation of the conference that makes it easier for everyone to write reports afterwards. One of the participants said “The team of note-takers was awesome.  It let me focus on how any given session could affect my work, without worrying that I’d miss something important as I chased down random thoughts.”  For me they function as a quick summary of a video, and I’ll likely scan the notes of the sessions that I missed to figure out which videos I want to watch. Many thanks to  Kimberly Garmoe,  Eka Grguric,  Mary Jinglewski,  Jonathan Kift,  Jonathan Schatz, and  David Waddell.
  • No-host lunches were a great way to get people outside the building to see a  little  bit of Vancouver. They also were a way to create a structured  opportunity  to socialise in small groups. From an organizing perspective it wasn’t a lot of work. We created a map of places that are nearby the venue with tasty food  that can  accommodate  8 people, found locals who were willing to lead the groups, and put out signup sheets (7 people plus a leader). We made sure we identified places for vegetarians and gluten free folks. According to participant feedback the no-host lunches were a big hit. Also, we had a really tight budget, so this allowed us to provide something for lunch without actually having to pay for it. We did this for the Access conference, but didn’t organize it enough and it was a bit chaotic. With a bit more forethought this time things went much more smoothly.

Live note taking and no-host lunches are ideas that can be adapted to any kind of conference or event, not just an open source library software event.

This was the first time that the conference proceedings were streamed. It was expensive to pay for AV for the main track, but I think is important and should be a requirement of future conferences. There were a total of 183 people watching the live stream from the United States, Canada, Czech Republic, Japan, Mexico, Finland and the UK. As Mark, Shirley and Ben from the BC Library Coop were willing to figure out a DIY streaming solution for the tech track, we were able to also do this for next to no money. It was awesome to hear from someone watching in Mexico (a CS Masters student who is implementing Evergreen for two university libraries) via Twitter. Thank you to Sam Mills  for volunteering to edit the video from the main track and to Mark Jordan for getting it up on the Internet Archive.

by Tara Robertson at May 01, 2013 06:01 PM

April 12, 2013

Evergreen International Conference (2013)

Give us feedback!

The Evergreen 2013 conference has come and gone and we want to hear what you thought about the conference so we can help next year’s organizers in planning an even better conference experience for you. Tell us what you liked, disliked, best food and favourite made-in BC TV show. Thanks for participating in the conference and visiting our lovely city!

All the best, courtesy of your superstar Evergreen 2013 Organizing Committee:

  • Tara Robertson (Chair), CILS
  • Anita Cocchia, BCELN
  • Caroline Daniels, KPU
  • Mark Ellis, RPL
  • Mark Jordan, SFU
  • Paul Joseph, UBC
  • Shirley Lew, VCC

by pjjoseph at April 12, 2013 09:06 PM

Group outing to the Irish Heather tonight

Feel like getting Irish tonight? Need a pint or two of the best Guinness in Vancouver? Meet up with Sharon and Kevin in the hotel lobby at 6:45pm for an excursion to the best little Irish pub in Vancouver, the Irish Heather.

by pjjoseph at April 12, 2013 08:53 PM

October 10, 2012

BOSS: Bibliomation and Open Source Systems

Evergreen Enhancements - Developers Selected

Bibliomation has reviewed the quote submissions from the Evergreen developers and based on our priorities and the available funds for this fiscal year, we will be working with four different developers on thirteen of our original twenty-eight enhancement requests.

The four Evergreen developers are Thomas Berezansky, Equinox, Catalyst IT Services, and EDOCEO.

To see the full list of enhancements that we will be moving forward with, go to

If you have any questions about any of our enhancements, you can contact Amy Terlaga at terlaga AT biblio DOT org.

by Unknown ( at October 10, 2012 05:14 PM

September 19, 2012

GSoC 2012 (Pranjal Prabhash)


In my last post I talked about getting my code published as a PEAR package. Well, I did talk to them and they asked me to change my code a bit, add some PHPunit test, and to organize my directory in a different fashion. But, vacations are over and I have been too busy to make those changes. Yes, its been long since my last post. But, my first update after GSoC is here. I have changed the way I used to POST using cURL. Now, I am using HTTP_REQUEST2 to POST and send headers. As it says on PEAR, HTTP_REAUEST2 “Provides an easy way to perform HTTP requests”, more information over here (

Some PHPunit test, and a new package name is what I aim to do next.

by pranjal710 at September 19, 2012 05:18 AM

August 15, 2012

GSoC 2012 (Pranjal Prabhash)

openSRF PHP Library

The openSRF-PHP Library is ready and can be used to get response from an openSRF service using the services and methods present. There are two examples present, which will tell how to use the library. A documentation has also been added ( . The first part of the documentation describes functions, classes and their member functions, parameters passed and their return values. The second part of the documentation briefly describes what happens when someone uses the library i.e. the role of each class/function. My github repo is mentioned in the github tab.

Someone who helped me throughout, this library would not have been what it is now had my mentor Lebbeous Fogle-Weekley not helped me. I thank him for helping me by breaking the project into small parts and guiding me whenever I got stuck. There are a lot of things (which might be small for him) but were new to me, and they will surely help me throughout. Thankyou Sir, for editing my code, which cleaned it made it a lot shorter and for everything.

The next thing I am looking forward is to get it published as a PEAR package. My next post will tell about the changes I have done to get it Published as a PEAR package.

by pranjal710 at August 15, 2012 05:44 PM

August 12, 2012

GSoC 2012 (Sy Duan)

Problems encoutered in Testing the module

Last two weeks i'm trying to test my new functions in the module. Compared to the normalize function which has a test script. They are more difficult to test. I located they were used in the bib merge function. So i tried to extract some real use cases from the function. After that i can build some test cases to test the vandelay.add_field and vadelay.strip_field which is called by vandelay.merge_record_xml.

So I planned to batch import some marc records and extract some of real cases when there is a match needed to merge the record. But i failed to batch import the marc records(oca_unicode.mrc and Open Access Titles UOP). I tried a lot of ways. But the import process always crashes after i wait a long time. No error recorded in the logs. So i have to turn to the community for help.

by Swenyu Duan ( at August 12, 2012 03:12 AM

July 30, 2012

GSoC 2012 (Sy Duan)

New functions in extension c_functions

Last week I implemented two functions vandelay.add_field and vandelay.strip_field. These two functions are the first functions in extension c_functions which handles MARC in C.
These functions relies on libxml2, libxslt and ICU4C.
Now the extensions has some of the general c functions to perform some of perl functions in a simple way which will improve the development speed to translate perl script into c program.
I push the branch to evergreen/working. You can find the branch on;a=shortlog;h=refs/heads/user/dsy/extension_in_c.
I push the previous olis_xslt_process function, too.
All the functions have not tested thoroughly. I'm going to test them in the following week.

by Swenyu Duan ( at July 30, 2012 03:01 AM

April 27, 2012

Tara Robertson

Evergreen Unsung Heroes

I was inspired by Chris Cormack’s excellent series of blog posts highlighting awesome people in the Koha community. I wanted to adapt Chris’ idea to the Evergreen community. Here’s the call for submissions from a few months ago.

I have two observations from the last few months. First, people were reluctant to promote themselves and write bios listing all their accomplishments. I shouldn’t have been surprised by this. It was more effective to ask someone’s coworker, colleague or boss to highlight their contributions. I like that our community values humility, but know that most people enjoy being recognized for work that they are proud of. Second, some people felt that the work that they did was insignificant and not worthy of being recognized. Almost all of these people were women who had been nominated by other people in the community. After an email or two all of these people agreed to be profiled.
I’m going to continue this project for the next year. I’m sure the design students at Emily Carr University will do something interesting with this content (ebook? website? deck of playing cards? laser engraved beef jerky?) for the Evergreen 2013 conference.

by Tara Robertson at April 27, 2012 07:47 PM

March 09, 2012

Moving to Evergreen in Niagara

Check Out Receipt Template

In Header Section:
<img src=””&gt;
You checked out the following items:<hr/><ol>

In Line Items Section:

Barcode: %barcode% <br/>
Due: %due_date%

In Footer Section:
</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>
You were helped by %STAFF_FIRSTNAME%<br/>
Fines: Books/Magazines .25 per day,<br/>
Video/DVD 1.00 per day,<br/>
Equipment 2.00 an hour
Renew under  My Library Account at <br/>
Or call NCLibraries :  905-735-2211 x7767<br/>
(WC) x7767  (NOTL) x4413 <br/>

by nclibraries at March 09, 2012 04:51 PM

December 06, 2010

Evergreen International Conference (2011)

Call for Presentation Proposal Submissions

The 2011 Evergreen International Conference planning team is pleased to invite you to submit presentation proposals for the conference.

There are three programming tracks, and we hope to have a broad spectrum of programming within each track:  

by Chris Sharp at December 06, 2010 04:13 PM

November 23, 2010

Evergreen International Conference (2011)

Conference Planning Survey - Results

The results from our 2011 Conference Planning survey are in!

Here is a summary:

  • 75 respondents completed the survey; 79 started the survey.

On question #1, What tracks will you likely attend?

by Amy Terlaga at November 23, 2010 02:58 PM