It has been an exciting three months since IBM’s acquisition of StrongLoop while we’ve been realizing the promise of additional resources and partnership with our new co-workers. The Loopback team has seven additional full-time developers contributing to the backlog, fixing bugs, enhancing the framework, and in general helping with Loopback.
The triage process has many more hands and we’ve made a dent in the ever-growing number of open issues…finally! Not only is the number of issues going down, but people are receiving help a lot more quickly. We now have measurable results; we have a total of 518 open issues as I write, down from 539 issues at the last “What’s New” blog. We’ve streamlined maintainer responsibilities and created dedicated repository experts to handle community issues and examples. The result is your questions get answered faster and your issues get fixed faster!
Examples, too, are getting their long-overdue care and feeding. We can now make examples more full-featured as we have more resources to go in-depth. We’ve improved and finalized the example template and tutorials will now follow a standard README format. We’ve consolidated a few related examples to reduce the total number of repos.
Here’s a short introduction to the new Loopbackers and what they’ve achieved in a short time.
Amirali Jafarian (@Amir-61 on GitHub) contributed to a couple of LoopBack modules to add new features for supported databases. He’s focused on Loopback connectors, loopback-boot, and example projects, to name a few. He is an active member in the Loopback community helping on documentation, and on triaging and resolving issues reported by the community. He likes to spend his free time with his family and friends, watching soccer, and travelling.
His recent PRs:
- loopback-boot#164 – improved the boot-loader to pass “env” from the options argument to the app settings.
- loopback-example-app-logic/#12 – added email functionality to this example app.
- loopback-boot/#162 – implemented warning that is printed when the main config is missing while an env-specific config file exists. This will make it easier to troubleshoot config-loading errors.
- loopback-example-remote#7 – fixed the example app to use the new explorer version.
- loopback#1847 – added missing API documentation for Model.nestRemoting().
Candy Ng (@0candy on GitHub) has been a key contributor to organizing the new team around getting started with Loopback.
- loopback-swagger#20 – implemented missing support for built-in GeoPoint type in the swagger spec produced by loopback-component-explorer.
- angular-liveset-example#9 and loopback-example-pubsub#10 – updated those two example apps to use the latest project layout and scaffolding.
David Cheung (@davidcheung on GitHub) contributed fixes and enhancements to the Loopback Angular SDK. David is focusing on Loopback front-end components and also has been updating documentation and example applications.
- loopback#1855 – added missing API documentation for User model properties like “realm” and “status”.
- loopback-sdk-angular#193 – fixed a bug where “remember me” option was not preserved across page reloads.
- loopback-sdk-angular#191 – improved the code generator to include model description in the ngdoc comments generated.
Gunjan Pandya (@gunjpan on GitHub) is working on enhancing security of out-of-the-box LoopBack applications and some much-needed maintenance on the plethora of LoopBack examples. He has also become an active participant in the community, helping out with issues and bug fixes. In his free time, he likes to explore natural landscapes and capture them in pixels.
- loopback-workspace#236 – modified the project template to include helmet middleware as recommended by our recent blog post describing Best Practices for Express in Production
- loopback-workspace#239 – modified the project template to run “nsp check” as part of “npm test” in order to detect known security vulnerabilities in the dependencies used.
- loopback-workspace#235 – added support for starting the workspace app via “node .”. Before this change, one had to run “node server” instead.
Janny Hou (@jannyHou on GitHub), is working mostly on adding new features to loopback-generator. She is actively answering questions and solving issues. Specifically bug-fixing and upgrading LoopBack and related dependencies. She has been a welcome addition to the team as she cleans up the examples to comply with up-to-date scaffolding. She enjoys reading in her spare time.
- loopback-example-relations#20 – merged loopback-example-relations with loopback-example-embedded-relations to reduce the total number of example repos.
- generator-loopback#124 – added a new generator slc loopback:remote-method that guides you to create a new model method exposed via REST API.
- generator-loopback#120 – added name validation on relation generator to avoid conflicts between relation name and property name.
Loay Gewily (@loay on GitHub) has been heavily involved in the development of new enhancements related to databases and Passport, and addressing security related issues. He is also trying to help the community to fix the bugs that they may find when they use LoopBack. In his spare time, Loay enjoys watching and playing soccer.
- loopback-component-passport#110 – added email verification to ensure security and prevent hijacking of local accounts.
Richard Pringle (@richardpringle on GitHub), has spread himself in breadth, combing through and fixing Loopback’s issues and working with REST and remote connectors to improve remote capabilities. Additionally Richard has been applying his skills and working on GitHub tooling to improve team efficiency.
- loopback-connector-remote#28 – added a unit-test to verify the connector honors custom http.path options.
- loopback#1804 – implemented an option to treat user emails as case-insensitive, for example to treat “email@example.com” as the same as “User@Example.com”.
All said and done, this helps our four LoopBack veterans (Raymond, Ritchie, Simon and myself) to take a deeper look at the broader strategy and continue working toward high-value features on the Loopback roadmap.
The future is coming
In upcoming sprints, we will address some of the most glaring open issues:
- Fix the way we handle ObjectID type in different places, especially to correctly persist ObjectID properties in relational (SQL) databases. Simon is working on a short-term fix in loopback-datasource-juggler#778, and we will be looking into ways how to address this issue more properly for long-term.
- Implement a more secure error handler for production environments. Our proposal is described in loopback#1650. Feel free to join the discussion and let us know if have ideas how to make the handler even better.
- We’ve been gradually adding Promise support to Loopback: many LoopBack APIs now return a Promise object instead of expecting a callback argument. We want to enhance our documentation and examples to better advertise the promise support we have. Note that not all APIs are promise-enabled yet. You can watch progress in loopback#418. Contributions are very welcome!
- We recently rewrote LoopBack Explorer to produce Swagger 2.0 documents. As more people use the new version, we’ve discovered few edge cases that are not handled correctly. Fixing these issues is among the priorities for the upcoming sprints.
Meanwhile, we are discussing how to make LoopBack even more awesome for you, the developers. It’s been some time since we made the last major release and we feel it’s time to give LoopBack a bit of refresh. Here is a sneak peek of areas we are thinking about:
- Many people have asked for context propagation, however the current implementation based on continuation-local-storage (CLS) is not as reliable as we would like.
- LoopBack in the browser (isomorphic LoopBack): The size of the client bundle is too large, which makes it impractical to use. We’re working on reducing its overall size.
- ACLs (access control lists) are quite complex and can difficult to use, especially with complex nested routes. We’d like to simplify how you define and use them.
- LoopBack models make it easy to build inheritance hierarchies, but composition is too difficult. As a result, many core features like user authentication are difficult to extend and customize.
- In many places, preserving backwards compatibility required additional code, extra options, or even made the features more difficult to use. A new major version is the right time to pay off this debt.
We will share more details soon, stay tuned!
You can help too!
LoopBack is an open-source project welcoming contributions from its users. If you would like to help, please pick one of the issues labelled as “Beginner Friendly”, see this GitHub view for a full list.