Bridging Desktop And Web Applications - A Look At Mozilla Prism
by Michael Arrington on March 22, 2008

New platforms like Adobe Air and Mozilla Prism are evolving that combine the benefits of Internet flow with the flexibility and power of desktop applications. They are part browser, part desktop app and are extremely efficient for certain types of applications.

Flash, Silverlight and Ajax get most web applications over the hump in terms of usability and are the technologies behind the fast transition of desktop applications to the web. But it’s not clear that they’ll ever kill off all desktop applications entirely. The bridge between them may very well be Air and/or Prism.

Matthew Gertner
, who was a co-founder and CTO of startup AllPeers before it shut down earlier this year, is now working with Mozilla on their Prism project. I asked him to write a guest post discussing Prism and how it fits into the ecosystem v. Air as well as a number of emerging technologies for using web applications offline (Firefox 3, Google Gears).

Read Matthew’s blog, Just Browsing, here.


Thanks to innovations like Ajax and Flash video, web apps are quickly gaining ground on their desktop counterparts. With a few notable exceptions like Firefox and Skype, the big software hits of recent years have been websites such as Flickr, YouTube and Facebook. And yet web-based software cannot yet equal the high-quality user experience of the best native apps. This is the reason why Apple was forced to reverse its original decision to make Safari the official SDK for the iPhone. It also explains why online productivity suites like Google Docs are still struggling to compete with stalwarts like Microsoft Office. Web apps simply don’t provide the responsiveness, performance, whizzy graphics and access to local data that users crave, and they only work when you’re connected to the internet.

Single-site browsers (SSBs) aim to bring the best of the desktop to web applications. Rather than running programs in normal web browsers like Firefox or Safari, wedged in a tab between New York Times articles and TechCrunch posts, each app is given its own dedicated browser, which is customized to include many of the desktop features that users know and love. Some of the advantages are obvious. Apps like Gmail and Facebook get an icon in the dock (on Mac) or the taskbar (on Windows) for easy access, and in the case of Gmail the icon can be “badged” with the number of new emails, a popular feature of traditional mail clients. Superfluous elements like the back/forward buttons, generic browser menus and the URL bar can be hidden away, reducing user interface clutter. Other benefits are more subtle. Since each app is running in its own operating system process, for example, a crash in one program won’t bring down your whole browser.

Mozilla Prism is one of the oldest examples of a site-specific browser. It grew out of the WebRunner prototype created by Mozilla developer Benjamin Smedberg, which he showed off at the XTech conference in 2006 to demonstrate the capabilities of the Mozilla platform. Another Mozillian, Mark Finkle, recognized its potential and continued to extend and improve the prototype. It was rebranded as Prism and launched as an official Mozilla Labs project in October 2007. Rather than creating a new platform for standalone web applications, Prism aims to leverage existing web apps while integrating them more smoothly into the overall desktop experience.

With the release of Prism 0.9 two weeks ago, the project now comes with a Firefox extension that makes creating a single-site browser for a website a one-click process that can be performed directly inside Firefox 3. Surf to Gmail, for instance, choose “Convert to Application” in the Firefox menu, and a shortcut with the Gmail icon appears on your desktop. Clicking the icon launches Gmail in its own window. Extensive customization options are available to add things like dock badges, system tray icons and popup notifications. Web developers can add special hooks to their code so that these bells and whistles are automatically included whenever someone spins the app off onto their desktop. Prism is still very much a work-in-progress, but it has already met with some early success; recent Yahoo acquisition Zimbra, for example, is using it to deliver a desktop version of their popular web-based mail client.

Adobe announced the first alpha version of Apollo in March 2007. A beta version was released in June, rebranded as Adobe Integrated Runtime (AIR). AIR is similar to Prism in many ways, although it is based on the open source WebKit rendering engine (also used by Apple’s Safari browser on the Mac and iPhone). The other big difference when compared to Prism is that AIR, in addition to web standards like HTML, CSS and JavaScript, supports Flash and another proprietary Adobe language called Flex. A glance at their application showcase reveals a heavy emphasis on using Flash and Flex to give applications a slick native look and feel. Early adopters include big names like eBay and AOL.

Another noteworthy site-specific browser is Fluid. It has an impressive list of features considering that it is the work of a single developer, Todd Ditchendorf. The main restriction is that it works only on Mac OS X 10.5 Leopard. Perhaps the most noteworthy feature is “built-in support for Greasemonkey-compatible userscripting.” For those not familiar with Greasemonkey, this means that a web app can be modified with a simple JavaScript file that runs on the client whenever the app is loaded. There is already a huge number of scripts available to do things like send SMSes from Gmail, download videos from YouTube and strip ads from websites. This type of userscripting is particularly useful in the case of a site-specific browser since changes to the application user interface may make it work more effectively on the desktop. For example, certain features might be moved from hyperlinks inside the application to the window’s menu bar. In the long term, web developers will hopefully make modified SSB-friendly versions of their apps available, but in the meantime userscripting can be used to pimp them out directly on the client.

A final contender is Google Gears, which was originally positioned as a way to take web apps offline so that they can be used without a live internet connection. Currently the only Google application to support Gears is Google Reader; users who install the plugin can sync their news feeds to their local disk and read them offline. It has recently become clear that Google has much bigger plans for Gears; a “Desktop Shortcut API,” for instance, lets Gears users add an icon to their desktop to launch an app directly. Gears developer Dion Almaer provides a laundry list of future APIs, including everything from notifications and cryptography to image manipulation.

As such, Gears represents a strong move on the part of Google into the browsing space, almost certainly to include site-specific browsing. Despite persistent rumors, it is now apparent that Google does not intend to create its own “GBrowser”. Instead, it is using Gears as a vehicle to add new features to existing web browsers (it currently works in Firefox, Internet Explorer and Safari), for use both by Google and by third-party apps. Google obviously realizes that its applications won’t be able to compete with the likes of Microsoft Office without significantly beefing up the capabilities of the web browser. At the same time, it would be too stiff a challenge to achieve broad market penetration with a completely new browser brand. Gears is its elegant solution to this problem.

Offline functionality is key piece of the site-specific browser puzzle. Internet connectivity may one day be ubiquitous, but in the meantime web apps need to function offline if they are to compete with their desktop brethren. HTML 5 includes a specification for offline web apps that is already supported by Safari 3.1 and Firefox 3. Gears is in many ways a direct competitor, although one of the HTML 5 editors, Ian Hickson, works for Google, and it is quite plausible that Gears will be adapted to support the specification in the future. Offline functionality is not inherently linked to site-specific browsers, but together the two form a powerful combination.

It’s pretty early to call a winner in the site-specific browser space, especially since heavyweights like Apple and Microsoft are probably poised to enter the game as well. But Prism has one big advantage: a killer app in the form of Firefox. By integrating Prism into a future version of Firefox, Mozilla could quickly get its technology into the hands of its 150 million users. AIR, on the other hand, has the advantage of using Flash and Flex to add sizzle to web app user interfaces, at the price of requiring potentially significant adaption on the part of the web app developer. However the space shakes out, the era of running applications in a tab in a traditional web browser may soon be coming to an end.

Responses

Comments rss icon

  • where do you get dig this stuff up. it is good stufff!

  • Dale - Matthew is a friend and stayed at my house last week for a couple of days. We struck up a conversation about Prism, Air, Gears, etc. and I realized he’s an expert in this area and understands it better than most people. I told him if he wrote a guest post for us he’d become rich and famous and certainly have a gaggle of groupies chasing him around immediately afterwards. He agreed.

  • Should I register GertnerGroupies.com ? that is if it isn’t already taken..

    Excellent news Matthew, congrats on the new digs.

  • i was impressed with what prism is intended to do but few months ago i guess some blogpost about it made to the techmeme and i checked the app out and i was disappointed. it like a browser, but more limited.

  • Very informative post. Thanks.

  • Interesting…
    So it is progress to send things back to being one window with no tabs?
    Wasn’t the point of tabs to put all of those windows into one?

  • One cool tool aiming at the same was (or still is?) Morfik. They are offering Web Applications which can easily be brought to the desktop. What I mean is - you get EXACT same online/offline functionality.

    Two years ago they were far ahead everyone else in this field, unfortunately they lost lot’s of time doing … nothing.

  • great post.

    an important fact that wasn’t noted is that 3D3R Software Studio launched the first Site-Specific-Browser (or Single-Site Browser) in late 2005, by the name of Bubbles. Bubbles is being used by tens of thousands of active users on the Windows platform and has been supporting a tight integration into the desktop and greasmonkey-like scripts from the early days.

    3D3R is launching a new version of Bubbles within a few weeks.

  • @Anonymous, it’s important to distinguish between apps and documents. I have a small number of web apps (Gmail, Google Reader, Twitter) that I’d rather have in their own window, with a badged dock icon, etc. For normal documents, tabs are much better (I have probably 20-25 open at all times and I’d go nuts if each one had to go in its own window).

  • I think bias is unavoidable when the article is written by someone working on the subject of the post so any reader who doesn’t walk in to it expecting a little bias is just a fool.

    That said, to compare Prism to Adobe AIR or Google Gears without the words “cross browser compatibility” ever being mentioned takes bias to a whole new level.

    Or did I miss the part where Prism now works with IE, Opera and Safari?

    I’m sorry to be so harsh here and I don’t want to accuse Mr. Gertner of dishonesty but there’s some seriously misleading statements here.

    In particular, this sentence brings disingenuous to a whole new level…

    “But Prism has one big advantage: a killer app in the form of Firefox. By integrating Prism into a future version of Firefox, Mozilla could quickly get its technology into the hands of its 150 million users. AIR, on the other hand, has the advantage of using Flash and Flex to add sizzle to web app user interfaces, at the price of requiring potentially significant adaption on the part of the web app developer. “

    So let me get this straight, asking app developers to write a program specifically targeted towards a single browser (not even the dominant one) is requiring more than Adobe Air which is essentially just an upgrade to the Free Adobe Flash Player. Really?

    Again, I’m sure the author assumed that people reading this were intimately aware of all the technologies he was introducing but, as written, the whole thing comes off as pretty dishonest.

  • I was just researching Prism the other day, it’s very interesting. Many people simple won’t ‘get it’ but that’s because they aren’t thinking broadly enough. Prism opens up some _very_ interesting possibilities.

    Thanks for the awesome guest post Matthew!

    Now I’m off to go work on my Prism based killer-app idea ;-)

  • Great post. In the bigger picture, I think these are transitioning technologies which are very useful. My take here…

    http://blogs.zoho.com/general/.....n-between/

  • @ Tom,

    “So let me get this straight, asking app developers to write a program specifically targeted towards a single browser (not even the dominant one) is requiring more than Adobe Air which is essentially just an upgrade to the Free Adobe Flash Player. Really?”

    I think the point is, if it works in Firefox (and therefore IE, Safari, etc) then it already works in Prism. There might be some optional Prism specific hooks that can be taken advantage of if needed - but nothing is required to make a typical web-app standalone in Prism.

    No one is writing a ‘program’ specifically targeting a single browser. Sheesh.

  • @Tom, cross-browser support is not nearly as important in the case of single-site browsers. There is nothing to prevent someone from using, say, Prism as their SSB and IE as their normal everyday web browser.

    Also, while it’s true that cross-browser support is a big plus for Google Gears as a browser add-on (something I pointed out in my article), AIR is just as bound to a single browser engine as Prism is (i.e. WebKit).

    Finally, it is simply inaccurate to say that Prism requires “app developers to write a program specifically targeted towards a single browser.” Mozilla has gone to great lengths to ensure that normal web apps run in Prism without any modification whatsoever. My point about AIR is that, to get the full benefit of that platform, you need to use Flex/Flash. That would be a significant effort if your app is based on HTML/JS. On the other hand, Flash interfaces are really impressive, something I also mentioned explicitly in my conclusion.

    Mike didn’t hide the fact that I do work for Mozilla, and I made every effort not to be biased. But I’m glad you made this point explicitly, and I hope that people will take the time to read the comments and make their own judgement.

  • Interesting article.

    The best thing to do IMHO is to join-forces with Google and integrate Gears into Firefox , as it looks to be more solid platform the Prism.

    We , as developers ,shouldn’t end-up with many platforms to support and deal with.

  • great post.

  • Alaskan Carnivore - March 22nd, 2008 at 3:44 pm PDT

    Damned fine article Mike

    Thanks..

  • Google not working on a browser? Not sure.
    http://thetruthaboutmozilla.wo.....e-browser/
    And if they were, what would it change?

  • @Markus & Matthew G – The point of this type of app (other than the simple “it won’t cause your other windows to crash”) is to make a more efficient user interface. That means two things. First, a developer can’t just throw their existing web app into a Prism window (or they can but that very much defeats the point).

    Second and more importantly, when a developer is choosing how to write their app and they want to write an app that employs the so called “Single Site Browser” model they have to pick a platform. They are going to then have to custom build their app around that platform taking into account whatever quirks each it has. So someone who says “I want to build a SSB app and I’m going to use Prism to do it” still has to target the users of one browser.

    @Matthew G. – When you say…

    “My point about AIR is that, to get the full benefit of that platform, you need to use Flex/Flash. That would be a significant effort if your app is based on HTML/JS. On the other hand, Flash interfaces are really impressive, something I also mentioned explicitly in my conclusion.”

    Well, again I think you are being misleading. As you pointed out above AIR can be used with simple HTML and Javascript and does not NEED to use Flex/Flash. So where as you are technically accurate in you said “to get the full benefit of the platform” you are giving a statement that would lead someone to believe otherwise.

    By the logic you used to construct the above sentence I could just as easily say that someone NEEDS to use Flash to get the full benefit of the Prism Platform since I assume Flash works in Prism and Flash interfaces are more powerful.

    Your Webkit point is a fair one btw though since Adobe is using it to expand what Developers can do with Flex I think its comparing Apples to Oranges in many ways.

  • I tried to like Prism earlier. But never used it. Felt like it’s more of a menu and toolbar-less browser window. Tried Fluid on Mac & safari widgets - working for me well.

  • “So someone who says “I want to build a SSB app and I’m going to use Prism to do it” still has to target the users of one browser.”

    You don’t need Firefox installed to use Prism. The user could very well be an Opera, IE or Camino user. Besides, how is this different from deciding to target AIR (webkit) over other alternatives? I just don’t get your point here.

    I’ll let Matthew argue you second point but it looks to me like you are just nitpicking.

  • Tom, Whilst I can understand your points I think the author here has made it very clear that this guy works for mozilla. In saying t at I would still have to disagree with your comments about bias. in fact I would urge you to look at the differences between prism and AIR. You will quickly see that AIR is the one that locks you down with using their products namely flash & Flex, where as Prism is focusing heavily on HTML and open standerds.

  • @Tom, saying “by the logic you used to construct the above sentence I could just as easily say that someone NEEDS to use Flash to get the full benefit of the Prism Platform” is pretty misleading. Flash is an Adobe technology that is heavily promoted by Adobe.

    You’re right that truly effective SSBs will need some extensions to web technologies. I know that Mozilla is committed to getting other vendors involved so they can come up with e.g. JavaScript APIs that are supported by everyone. If people like Google and Adobe join into these efforts that’ll be great! The bottom line is that, in my opinion at least, Mozilla has a well-deserved reputation for being open and promoting standards, enough for your reservations about Prism to be unfounded.

  • I’m wondering if desklets, gadgets, widgets and similar stuff already had the features that others are trying to reinvent with their PR machines!!

    Please tell me if I’m getting it wrong??

  • @Tom, etc: AIR and Flash are closed-sourced, owned, operated and directed by Adobe, which are trying to lock you into their new platform. They mostly require that you rewrite your offerings using their new toolset.

    Site-Specific-Browsers like Bubbles, Prism & Fluid are an evolution of browsers rather than a new branch. As such, they are based on existing, widely embraced standards like HTML, Javascript and CSS. They add to that with capabilities that empower existing web-applications.

    The idea for site specific browsers, at least the way we at 3D3R conceived it, was that there is a need for a middle layer to bridge the gap between EXISTING web-applications and the kind of experiences we’ve come to be accustomed to with desktop applications. The need to bridge this gap is natural as there was, and still is, strong migration of applications from the Desktop to the Web. The ability to take any existing web application and use, experience and maneuver it with the skills (we as users) have acquired using desktop applications is clearly an empowerment rather than a lock-in.

    Almost all web-applications do their best to support all the major browsers out there, and as such will inherently be suitable for hosting within any of the major SSB like Bubbles, Prism and Fluid. The differences in desktop-bridging APIs will naturally converge over time either directly or through intermediate layers and make the it an easy task for those who wish to provide ‘batteries included’ support for SSBs an easy one.

    The fact that such a need rose comes to show that Browsers were actually slow to adapt to user’s needs. It is clear that these needs are sharper with people like Matthew, Mark Finkle (Prism), Todd Ditchendorf (Fluid) and myself, which in turn brought us to write the software we wrote. It is up to time and our skills in writing and distribution software to tell if we correctly anticipated a huge future need, or rather just had a good time playing with new concepts.

    I have a strong feeling we’ve hit a vane with Site Specific Browsing.

  • MagNet is coming…..

  • It all depends on what you want to do.

  • Thanks Mathew for a very good rundown of the current crop of “SSBs”. As a user I’ve been looking for something with this functionality for some time. (And indeed, one of my Mac friends suggested “Fluid” along with “Get a Mac!”)

    I realize that it wasn’t the focus of your post, but, as a developer, I think it’s quite interesting to look at what this new environment means, both in terms of the kinds of applications people will get, and in the way that apps will be developed. I believe that it signals the acceptance of the “webapp” as a “real” app - indeed, when writing to a single browser, writing webapps can be even more joyful than their thick client counterparts. HTML+CSS is often an expressive & terse way to describe a screen. And while JavaScript has it’s flaws, it’s not that bad either.

    My only concern is that, with the onslaught of so many SSBs (nice acronym, BTW) end users will have to have them *all* installed in order to use their applications. That’s a problem. I’d like to hear your thoughts on that.

    Thanks again,
    Josh

  • Thanks for the great article Matthew. We have been doing quite a bit of hybrid web / desktop work recently. The last three technology stacks we used for hybrid apps are:

    1. Java/Swing with WebRenderer for the browser component
    2. C#/WinForms with IE as the browser component
    3. C#/WPF with IE as the browser component (experimental project)

    We used the desktop frameworks to support drag and drop, clipboard integration (cut & paste), system tray integration and docking frames. The web aspect allowed us to provide rich content that could be updated quickly on the server. We also used the web component for the help systems.

    It will be interesting to see if Flex and/or Silverlight evolve to the point where these hybrid apps are no longer needed.

    I wrote about this briefly here:
    http://www.techhui.com/forum/t.....pic%3A9558

  • Mike, how about allowing a guest post from the organisations that represent the other platforms? so your readership can see all the different biased views and make their own judgements after seeing all the different biases.

  • Fluidapp.com for the Mac is badass w/ quicksilver.

  • I found this article very interesting, so I went and fiddled with the Prism addon to see what it did. I used it to create a gmail shortcut on my desktop, but I am curious as to exactly what the difference is. As far as I could tell, it just appeared to open up gmail in a smaller window? If anyone could spell out the finer points of this technology and as to what its true usefulness is (maybe gmail is a bad example of its utilization?) I would much appreciate it!

  • There’s been a Single Site Browser out for Amazon since at least 2004 called Mozilla Amazon Browser:

    http://www.faser.net/mab/

  • I find Prism to be good for launching sites like HULU from my couch via the Laptop that is connected to the TV .

  • if you’re into this sort of technology, be sure to also check out jNext (http://www.jnext.org) - it runs on Windows, Linux and Mac OS/X in IE, Firefox, Safari, Opera and more.

  • The poster didn’t seem to mention silverlight. I know in this day and age, where people don’t want to pay for anything, it would be overlooked. The cost to develop is so much lower because it uses object oriented code C# with rich debugging and all that. You basically need expression blend 2.5 and Visual studio to make the 2.0 apps, but you get such a rich framework that it is really very compelling.

  • I still haven’t figured out what the benefits of AIR, PRISM, etc are over just using your browser… how does launching a web app this way provide anything over launching it in a tab in your browser? Does it provide better performance for some reason?

  • Let’s face it, the only reason desktop applications are still relevant is because of bandwidth and security. Once we’re over the bandwidth issue ( where new technologies such as FIOS are making 20mbps possible ) the Internet economy will only be dealing with security issues.

    When companies like Salesforce.com and even Intuit with their online version of Quickbooks, end corporate users are showing little resistance in trusting their most private data ( customer data and financial data ) to web services.

  • Well it’s about time this has been mentioned. Flex, Flash and AIR are the words associated with Web 3.1

  • Matt, the Czech radio has just mention there are hordes of screaming blond girls outside your flat ;-)

  • Perhaps I’m just missing something here, but if the key benefit of SSB’s is that they return more screen acreage to the app (by removing the url bar, back button etc) , wouldn’t it just make more sense to run the app from within a maximised popup in your favourite browser?

    My view is that web apps will only hit a home run when they are finally able to manage the browser memory space. This includes permanently destroying unused node trees (instead of just setting the top pointer to null, as at present) - and, most importantly, being able to locally cache information in binary form (ie. NOT cookies).

  • @Davey, that’s one advantage, but probably not the “key benefit”. For me, the big win is to have something like Gmail visible in my dock with the number of unread messages, so I don’t have to scrounge through a bunch of tabs in my browser window (or find the right window if I’m using a popup) just to see if I have new mail.

    There are also some advantages in terms of memory management, since I can at least see how much memory each app is using (in the Task Manager or Activity Monitor). I can also restart apps without restarting the whole browser. Of course, memory management in the browser can be improved, but it probably makes more sense to let the operating system take care of it.

  • A couple of weeks back I spent some time looking at AIR, Prism, Gears, etc. I came away with a feeling that AIR wins hands-down, and not because of Flash, but really because of its JS/HTML implementation. In fact, I wouldn’t care much about using AIR for doing offline Flash.

    Looking at Gears, I crossed it out rapidly because it’s plugin based. Plugins are interesting, but I’m really interested in having a browserless functionality. Prism looked interesting, but it too came off my lost because it currently has no rich API for local storage, and OS access.

    AIR not only has an amazingly-rich local API (http://livedocs.adobe.com/air/1/jslr/index.html), it’s got an entire framework for deploying signed binaries (Thawte even has AIR-specific code-signing certs), deploying apps and updating them. For all the hoopla about web application, one of the reasons these new desktop runtimes are appearing is for allowing neat web apps to be used in enterprise settings (i.e. where apps have to be local, controllable, auditable, etc.) And in that regard, AIR is eons ahead of Gears and Prism. It’s still not got the enterprise deployment done (i.e. no SMS app push yet), but it’s very close to it.

    Not to mention that Adobe will then be able to push AIR as part of a natural upgrade to Acrobat and/or Flash (possible like Apple’s push of Safari through iTunes), which are already are on most business users’ desktops.

    Also, note that AIR is not due to a recent fad at Adobe. In fact, AIR is rooted in Macromedia Central which dates back to 2004/2005. While Central was Flash-centric, AIR’s addition of JS/HTML clearly shows that Adobe gets the point of having JS/HTML support for taking webapps offline. Not to mention that they went out of their way to show that a lot of the popular Ajax frameworks are supported on AIR (jQuery, Dojo, etc. but not Prototype, yet.)

    That being said, I too am worried about the fact that AIR is proprietary. However, if Adobe doesn’t play its cards nice, nothing precludes reimplementing AIR’s JS API in Prism …

  • Great post !

    Can Prims locally cache information like Gears ?

  • Interesting article, thanks.

    Check out my blog for legit ways to make money online.
    http://mikesmoneyclub.blogspot.com

  • @Edmar, Firefox has features for client-side storage (see the HTML 5 spec) that can be used in Prism.

  • Matthew Gertner:

    I agree with your comments regarding desktop/docking icons, but I think you might also agree that they are ‘outside’ of the SSB. My main point is what can be improved inside.

    At the risk of starting a thread inside a thread, I would like to re-emphasise my points re. memory management.

    As a web app developer, I can tell you that there is nothing more frustrating than seeing the app’s memory usage going through the roof, even though most of that space could be switched out, or killed - and there is nothing you can do about it (JS decides in its own time when, and if, to mop up).

    If you could convince your friends at Mozilla to unilaterally implement the following three JS calls, not only would you do the internet the biggest service in years, I will also promise to fly over from Europe and hug you:

    1) kill(ref) : goodbye (forever, immediately)
    2) swapOut(ref) : I’ll be needing you again
    3) swapIn(ref) : Ah, there you are…

    Cheers

    D.

Leave Comment

Commenting Options

Enter your personal information to the left, or sign in with your Facebook account by clicking the button below.

Alternatively, you can create an avatar that will appear whenever you leave a comment on a Gravatar-enabled blog.

Trackback URL
bugbug
The CrunchBoard
  • MediaTemple Logo
  • QuickSprout Logo
  • OpenX Logo
  • Cotendo Logo