Working with the Alfresco presentation tier can be overwhelming. There is a lot on the table to choose from and more options are popping up frequently these days. But which path do you take? What are the pros and cons? This post summarizes my 2c on choice in web based technologies targeting Alfresco.
Given requirements targeting the desktop, Alfresco Share is the first thing one should look at. Share is an extensible, battle-tested collaboration tool which covers a whole lot of functionality. This is absolutely great and sets Alfresco apart from competition such as Nuxeo. You are given an application(!) which you can immediately(!) throw at people and get them going. Minor customizations can usually be implemented easily (= a few lines of extension code) – no need to build an application from scratch using a framework or roll your own stack. This is what I do all time, and I am glad to have this opportunity.
Share has been evolving slowly over the years, and Alfresco is trying hard to stay backwards compatible, save investments and prevent third party code from breakage. The flipside of this coin is that we see various approaches across disciplines (i.e. Forms, Templating, Resources) – deprecated and state of the art – within Share.
Aikau and Surf
It takes time getting comfortable developing with Surf and Aikau. Documentation of the latter is in pretty good shape these days, the former not so much. Fortunately, there is fresh effort (thanks Bindu et al.) underway to fix this. However, I for one do not consider working Aikau a pleasure. I get things done, but I have issues with the IDE experience (Intellij in my case). Navigating through the code feels cumbersome – I feel forced to use fulltext search all the time. I may be doing it wrong, and I’d appreciate somebody demoing how to work fluently. Other than that, I feel there are issues which may never get fixed. The issue [ACE-2566] Improve development features for Share can serve as an entrypoint.
As a side note: Personally, I would like to see improved support for „large scale“ extension module usage such as dependency management and discovery. I may be doing this completely wrong, but I find it pretty difficult to deal with a Share instance hosting 50+ (fine grained) module extensions. I’d be willing to join an effort if there is a chance to get this into the core distribution.
Alfresco recently announced they will be investing heavily in Angular 2, building a(nother) framework along with tooling for next gen Alfresco applications. This move will surely resonate with the broader development community. However it also raises doubts about the fate of past efforts.
Update 01.07.2016: Alfresco NG2 Components was released yesterday. I only had a quick glimpse so far, but I have no doubt that developer experience will generally be way better than Surf/Aikau. On the contrary, I fear now everybody will go after the new ?, build new apps(!), and doing so silently sacrifices mix and match plugin style composability goodness as we have it with Share, Surf and Aikau. Everybody runs Share. Adding extensions is easy. Introducing a new application is surely more effort.
Other people (me included) are poking around with React.
Choice is good, right?
Developer fatigue or choice paralysis, anybody?
To be honest, I think there is too much out there already. More than it does us good. It may be time to clean up the house.