Nelmio goes in-house…

By the end of this month, most of our client projects are ready to ship.

  • concat – our big-data project – thrives to explains the stock-market.
  • colibird – a state of the art web-of-things application – monitors energy in buildings.
  • kleio supports artists in their daily business.

So what comes next?

In-house contracting

In addition to client projects we regularly do in-house contracting. We integrate an existing team and assist with the technologies we specialise in. We help with the bootstrapping of a new project, add some manpower to a late project or simply join your team for a while to work and spread our knowledge.

After 3 years of Nelmio’s existence, we have realised that we really love that part of our job. It is what we do best. Where we can really focus on what we love. Ultimately, it is where our clients really get the most out of us. As a consequence, we have decided to focus on in-house contracting for a while.

Hire us

So here we are now, a bunch of highly qualified and motivated people ready to join your team:

  • Jordi is the author of Composer and knows every dirty secret of Symfony and PHP. He also has a good working knowledge of JavaScript and common sysadmin tasks.
  • Pierre has a passion of JavaScript. MV* frameworks (Backbone.js, Chaplin, …) are his daily business and he has developed a taste for CoffeeScript and node.js.

Do not hesitate to get in contact with us directly if your team needs some additional manpower:

January 21, 2014 by Pierre Spring in News // Tags: Comments Off on Nelmio goes in-house…

2.5 years Nelmio – celebrate with us on 05.09.2013

Dear all!

Some 2.5 years ago Jordi & Pierre started a story called Nelmio. Meanwhile a few chapters have been added – many pages have been written, read, torn out, rewritten and some of them marked with dog ears to be followed up on a later stage.

No matter if you already have been featured in this story or not. We are looking forward to welcoming you at Zentralstrasse 37 to have a drink and a bite together, listen to some live music, thank you for your collaboration or even start outlining a potential new chapter.

Save the date & see you soon!

For additional information, please use the following link:


August 19, 2013 by Florian Graf in News Comments Off on 2.5 years Nelmio – celebrate with us on 05.09.2013

Open-source projects update

I spent the last two days going over most of our OS projects, Symfony2 bundles and other libraries to fix some issues, merge pull requests and tag releases. Here is an update on all changes:

Alice – v1.5.0 – Expressive fixtures generator

  • Added extensibility features to allow the creation of a Symfony2 AliceBundle (hautelook/alice-bundle)
  • Added possibility to fetch objects by id with non-numeric ids
  • Added (local) flag for classes and objects to create value objects that should not be persisted
  • Added enums to create multiple objects (like fixture ranges but with names)
  • Added ProcessorInterface to be able to modify objects before they get persisted
  • Fixed cross-file references, everything is now persisted at once
  • Fixed self-referencing of objects

Also note that Baldur Rensch recently started working on a bundle to integrate Alice in Symfony2, you might want to check that out as well.

Monolog v1.6.0 – Logging for PHP

  • Added HipChatHandler to send logs to a HipChat chat room
  • Added ErrorLogHandler to send logs to PHP’s error_log function
  • Added NewRelicHandler to send logs to NewRelic’s service
  • Added Monolog\ErrorHandler helper class to register a Logger as exception/error/fatal handler
  • Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel
  • Added stack traces output when normalizing exceptions (json output & co)
  • Added Monolog\Logger::API constant (currently 1)
  • Added support for ChromePHP’s v4.0 extension
  • Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel
  • Added support for sending messages to multiple users at once with the PushoverHandler
  • Fixed RavenHandler’s support for batch sending of messages (when behind a Buffer or FingersCrossedHandler)
  • Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now
  • Fixed issue in RotatingFileHandler when an open_basedir restriction is active
  • Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0
  • Fixed SyslogHandler issue when many were used concurrently with different facilities

MonologBundle v2.4.0 – Monolog integration in Sf2

  • Added support for the console, newrelic, hipchat, cube, amqp and error_log handlers
  • Added monolog.channels config option to define additional channels
  • Added excluded_404s property to the fingers_crossed handler to avoid logging 404s matching those regex patterns
  • Added ability to set multiple user ids in the pushover handler
  • Added support for an empty dsn in raven handler

Note that as of this version, the bundle’s release cycle is de-synchronized from the framework’s. It means you can just require "symfony/monolog-bundle": "~2.4" in your composer.json and Composer will automatically pick the latest version of the bundle that works with your current version of Symfony. The minimum version of Symfony2 for this workflow is 2.3.0.

NelmioSecurityBundle v1.2.0 – Additional security features for Sf2

  • Added Content-Security-Policy (CSP) 1.0 support
  • Added forced_ssl.whitelist property to define URLs that do not need to be force-redirected
  • Fixed session loss bug on 404 URLs in the CookieSessionHandler

NelmioJsLoggerBundle v1.2.0 – JS error logging in your Sf2 monolog logs

  • Added ability to give more context information by setting window.nelmio_js_logger_custom_context

NelmioCorsBundle v1.1.0 – Cross-Origin Request Headers support for Sf2

  • Added ability to set a wildcard on accept_headers

That’s it for today, but I would like to thank everyone that was involved in either sending pull requests or reporting bugs/feature requests to make all this happen!

July 30, 2013 by Jordi Boggiano in Development, News // Tags: , , , Comments Off on Open-source projects update

Generating fixtures with Alice

A common problem in software development, is that you need data to work with. This is especially true with data-oriented websites. Working with an empty database leads to all sorts of unexpected problems cropping up once the site goes live and receives real world data. Performance issues, visual bugs due to missing fields, too long or too small texts, etc.

The best way to address this is to have fixtures, fake data you use while developing or for automated testing of the website. However writing these fixtures can be a cumbersome process which leads to people postponing it and sometimes outright skip this step.

It used to be that Doctrine1 could load fixtures from yaml files, and symfony1 also had facilities there, but none of this has been made available to Doctrine2 or Symfony2 yet, or at least not in a very usable form.

Instead of writing a plugin for either of those, I set out to write a generic library to easily create objects from yaml files. It can be used with any framework or ORM, and also integrates the great Faker library to generate fake/random data. The library takes a few opinionated turns, so it might not be for everyone. However I am sure it will save you a great deal of time should you decide to work with it.

The library is called Alice, after the common Alice and Bob placeholder names, and you can of course find it on GitHub, including extensive documentation.

Let me know what you think of it!

October 29, 2012 by Jordi Boggiano in Development, News // Tags: , , 18 Comments

Nelmio is hiring

You might have heard of us. If not, here is
who we are:

We are a little company in Zürich, Switzerland. Our clients trust us. Our projects are technically challenging and mostly use cutting edge technologies such as Backbone.js, Symfony2, Redis and CouchDB. By keeping the company small we have the ability to carefully choose the projects we want to work on. This also gives us time to attend many conferences, both as speakers and attendees. And starting this autumn, we will be working on our product as well!

Right now, we would like to grow by one person.

Problems we currently solve are:

  • Finding best practices for pure JS applications using Backbone.js.
  • Writing REST APIs in Symfony2
  • Optimizing CouchDB and MySQL to cope with large amounts of data.
  • Web of things – Connecting physical sensors with the web. This is particularly fun and hard.
  • DevOps – Automating deployments and server setup.

Things we do:

  • Code. Code. Code.
  • Learn from clients.
  • Teach and empower our clients.
  • Learn from each other. A lot!
  • Care about the little things that make a difference.
  • Fun things, because.

Things we don’t know:

  • Designing beautiful sites. But we know people who do this very well.
  • Ruby, Python, Dart, … We write mostly JS and PHP, and contribute a lot to make sure these stay in the game.
  • CMS. We only work on tailored solutions.

So, what do you think? Would you like to join our team?

  • We do work mostly in English even if there is always someone who throws in some French or German words.
  • You should have good communication skills, and be able to act autonomously. The ability to learn and think is more important than your existing knowledge.
  • Remote work could be an option. You would need to be in roughly the same time zone and can come work in Zürich for a few weeks in the beginning. That way we could get to know each other.

Send us your CV, GitHub account or anything you think is relevant to

May 30, 2012 by Pierre Spring in News // Tags: , , , 1 Comment

Nelmio is coming to a conference near you

Here is a quick update on conferences we will attend and speak at in the next couple months. If you are attending any, feel free to come and say hi!

Next week our entire team will be at jsDay and phpDay in Verona, Italy. If you haven’t got tickets yet, hurry up because it is about to be sold out.

Pierre will talk about Backbone.js, Igor has two talks about realtime apps with websockets and the Silex microframework and I myself will be talking about managing your dependencies with Composer.

In June there are two notable events. The first is SwissJeese. A local JavaScript-oriented conference co-organized by Pierre that will be in Bern. It is free and on a Saturday so there is really no excuse not to come if you have an interest in JavaScript. Register for free on eventbrite!

The second a week later is Symfony Live in Paris which we are always looking forward to.

If you get a chance to go to both phpDay and Symfony Live, you can follow Igor’s second talk about Silex, which will be more advanced given the audience is already more familiar with the Symfony Components. If you miss Verona you can catch up on my Composer talk in Paris as well. William will hold an introduction to the Propel2 ORM and even you have no interest in PHP I will present the Redis key-value store so you can come anyway ;)

We sure hope to see some old friends and make new ones there, so if you were hesitant to come, just register before it’s too late!

May 11, 2012 by Jordi Boggiano in News // Tags: , , , 1 Comment

An Update On Composer

This weekend we have been busy hacking on Composer in our office together with Nils Adermann and Volker Dusch. We wanted to push the project forward a bit faster than the odd free evenings usually allow, and I would now like to introduce the changes we made.

Development versions handling

The former master-dev and similar *-dev versions we used to have were causing quite a few issues, so we decided to overhaul that behavior in a way that allowed us to get more consistency and fix a few long standing issues. For example dev versions can now be locked to exact commit revisions, and they will update to the latest revision when you do an update, no need to delete them from disk beforehand.

Basically dev releases are now simply branch names with a dev suffix – for numeric branches which are comparable – or a dev prefix for textual names that are not comparable, like feature branches and master. There is no way to specify the version manually anymore in your repository’s composer.json, since that was causing potentially dangerous issues with feature branches conflicting with the original ones.

If your package depended on a master-dev version, you should now depend on dev-master. If your package depended on something like the Symfony2 2.1.0-dev version, this one also is now dev-master since it is in the master branch. Older feature branches like 2.0-dev which is the 2.0 branch and not master are unaffected by this change.

This change will break many packages out there that rely on -dev packages of any kind, and we hope everyone will update their composer.json files as swiftly as possible to make the transition less painful.

The Packagist version database had to be reset for this change, so things will look at bit empty for a couple of hours while everything is re-crawled. None of the packages are lost and you should not have to do anything except having a bit of patience.

Dependency solver stability

Nils and Volker have been doing big progress on bugfixing and testing the solver. Those are mostly highly technical details that I will not dive into here. But long story short many old bugs should be fixed, and then some. It may obviously have introduced regressions, so if you encounter any issues please report them with your composer.json file so we can easily reproduce.


Igor has spent quite a bit of time on documentation, which you can see on github for now, and which should be migrated to soon.

Packagist / GitHub integration

Another great new feature coming from a pull request by Beau Simensen is the ability to let GitHub tell Packagist when you push new code to your repository. This should make package updates almost instant. It should be integrated into the GitHub Service Hooks soon enough, so if you don’t want to set it up by hand you can wait a bit, otherwise you can grab your API hook URL on your Packagist profile page, and add it in your repository.

Repositories configuration

It seemed that the way custom repositories are configured was confusing, so we took the chance to make it a bit clearer. Basically names are dropped and it’s all stored in a flatter structure that’s easier to remember. Documentation has been updated on Packagist.

All in all it has been quite a productive week-end and we will continue working on a few things today.

February 20, 2012 by Jordi Boggiano in Development, News // Tags: , 6 Comments

jsDay – A Family Reunion You Always Wanted To Attend

Last jsDay in Verona was a blast. Seriously. To Jordi and myself this was one of the most memorable conferences ever.

And I am not talking about the sessions. Of course the talks were good and the jsDay team managed to attract some of the finest speakers to talk about everything JavaScript. But so do other conferences. The wonderful thing about jsDay is the community you become part a of as soon as you enter Hotel San Marco. Speakers and attendees alike share this hotel for 3 nights and 2 days and you feel you are part of the family reunion you never dared dreaming of.

Like-minded people sharing their passion. Cocktails at the hotel pool. A welcome quiet time in the Hotel Spa. Late supper in some of Italy’s finest Restaurants. A good laugh at Powerpoint Karaoke. And an incredible sense of belonging to this family that greets you with open arms and open hearts.

At Nelmio, we are now looking forward to the next jsDay in Verona and we just felt obligated to tell you about this little gathering that feels a bit like ours and that you too could be part of.

I sure hope to see you there on May 16th-17th 2012.

January 31, 2012 by Pierre Spring in News // Tags: 2 Comments

Kickstarting a Swiss OpenData Revolution

Last weekend I took part in the MakeOpenData Camp. The goal of the event was on one side to encourage the government to open more data by showing that we can make good use of it. On the other side, events like this help to get more developers and designers involved and actually realize that there is some data that is publicly accessible. Continue reading

October 5, 2011 by Jordi Boggiano in News // Tags: , Comments Off on Kickstarting a Swiss OpenData Revolution

The Algorithm That Named Us Nelmio

I have never been one of the cool kids that play in a band, but I have heard that kids in a band spend more time coming up with a good name than actually playing music. My co-founder Jordi and I felt a bit like that in the first few months after deciding that we would start our own company. At that time we were still working a full-time job at Liip and had many side projects in addition to speaking at various conferences. We simply did not have enough energy to put into our new company. But whenever we met, we eagerly discussed new business ideas and fantasized about the hardware we would provide our employees. Sometimes we even worked on minor projects like Techup or Don’t Make Me Steal (did you sign the petition?). And there was one thing we always ended up doing, no matter what: Trying to find a good name for our company.

This is the story of how we came up with the perfect way to name a company! Continue reading

August 17, 2011 by Pierre Spring in News // Tags: 11 Comments