couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pavel Krivanek <>
Subject Re: CouchDB and XULJet for development of desktop applications
Date Fri, 10 Dec 2010 21:53:37 GMT

On Fri, Dec 10, 2010 at 9:30 PM, Florian Leitner
<> wrote:
> Hi Pavel,
> If I understood all your explanations correctly so far, XULRunner
> could actually be the "silver bullet" I was looking for. I think that
> something has struck me like a lightning after reading your
> explanations a few times: Why do a web interface at all?? As you write
> right in the first line:
>> XULRunner cannot serve web pages. It can only display them.
> Well, so I just connect to any CouchDB that has my data via XULRunner
> - in essence, it is already almost a browser, anyways, as its part of
> the Firefox UI

XULRunner is in fact something like standalone Gecko. You can run
XULRunner applications directly in Firefox with -app argument or to
the contrary run Firefox as XULRunner application
(/usr/lib64/firefox-3.6/application.ini in my system, this case the
application doesn't use only JavaScript)

> - so I could build a CouchDB "browser" that connects to
> CouchDB and serves the content I put there, including the views, and
> even administer it from the XULRunner/Jet app. On the other hand,
> because of XULRunner, I am no longer confined to the Same Origin
> Policy. So, to explain a bit more what I want to do, let me know if
> that would work out:
> The user gets an app that is build on XULRunner and XULJet and can
> connect to a CouchDB instance. This XUL-app then can display data that
> CouchDB holds, much as I was thinking of already; You could even admin
> the CouchDB from inside that XULRunner/Jet app. But then, the user can
> also browse to any webpage **inside** XULRunner, "grab" that page, and
> put it into his CouchDB. This could be either real visual browsing and
> scraping the web page, or by sending a request from inside XULRunner
> to some URL that, for example, returns JSON or XML REST data, and then
> that data gets dumped into CouchDB and he can work with it, all from
> inside XULRunner/Jet. As it is cross-platform, this approach will work
> on most platforms, too (and I'm happy if I'm good enough to get the
> big three with one interface, anyways, for now).
> So, I assume this is possible with XULJet based on XULRunner, correct?
> Thanks again for your patience with me and your verrry informative
> answers!

If you will create XULRunner application, you will start with a XUL or
HTML content that must be placed in chrome (within the application
directories). That pages and scripts have privileged rights so they
can access to local sources (like files nad processes) or they can
send Ajax requests to any source you like. It is not a problem to
download and eval an external JavaScript file and extend your
application with an externally served code this way. For example the
SeasideXUL uses only a small JavaScript code and document templates on
the client and it downloads the rest of the necessary libraries from a
Smalltalk web server.

So the content provided (even indirectly) by chrome has rights you
need. With the XMLHttpRequests you can get everything you like and
process it.

But if you want to display whole external page and you will use iframe
for it, the content inside the frame DOESN'T have privileged rights.
On the other hand you can display content from any source (for example and you have DOM access to the document in the
iframe so you can modify it by DOM manipulations or get its source
code etc.

The second option is to get data from an external source using Ajax
and by DOM manipulations to modify the document in the privileged
chrome context.

So I think that it is possible to do what you want and it should not
be hard and if you will use HTML instead of XUL then you will need no
new special knowledge.

There are not many general JavaScript XULRunner applications but for
example Pencil ( shows
that it is possible to use it even for quite complex desktop

-- Pavel

> Regards,
> Florian
> On 10 December 2010 19:35, Pavel Krivanek <> wrote:
>> Hi Florian,
>> No, XULRunner cannot serve web pages. It can only display them. If
>> your web interface uses mainly and almost solely Ajax then you can
>> create a very simple XULRunner application with HTML instead of XUL
>> that will send an initial XMLHttpRequest (GET) to the server, replace
>> the current document with the resultant data and then you will
>> continue with Ajax-only communication.
>> So you will have one web server and two kinds of clients - one that
>> will access the server (with LivelyCouch) from normal web browser and
>> that will have access to the data only from server database. The
>> second kind of clients will have to use special browser (your simple
>> XULRunner application). It will show content provided by the same
>> server with LivelyCouch however it will have wider privileges so it
>> will be able to communicate with local CouchDB too, access to local
>> files, processes etc.
>> -- Pavel
>> On Fri, Dec 10, 2010 at 5:03 PM, Florian Leitner
>> <> wrote:
>>> Hi Pavel,
>>> Thanks for your detailed responses. As you will have seen, I've
>>> replied to your comments in another thread, too. Specifically to what
>>> you wrote here:
>>> Yes, XULjet seems to very much solve the client side issues and
>>> creates a nice platform-independent interface for desktop apps.
>>> However, as I already wrote in another thread you replied to, too, it
>>> seems I will have to create _two_ interfaces: one web interface for
>>> the servers (using some web server wrapper for CouchDB, such as
>>> LivelyCouch), and one desktop interface for the clients (using
>>> XULjet). However, I could be completely wrong about this and maybe
>>> XULjet could also be used to serve web pages, so I can use XULjet for
>>> both interfaces? If that were the case, XULjet would actually be the
>>> perfect solution I am looking for, because I do not need to maintain
>>> two interfaces. So, is that possible with XULjet?
>>> Regards,
>>> Florian
>>> On 10 December 2010 09:56, Pavel Krivanek <> wrote:
>>>> Hi,
>>>>> Hi Pavel,
>>>>> I just read your post after my own, entitled "CouchDB/App, XHR, and
>>>>> the JavaScript Same Origin Policy". This sounds pretty interesting,
>>>>> especially your qoute about the Ajax issue and working around the Same
>>>>> Origin Policy. So, if this is a good tool to build desktop-based
>>>>> CouchDB apps, how platform-independent is it?
>>>> It is possible to run on every platform where Firefox works, so MacOS,
>>>> Windows and Linux are OK. Other processors should be ok too, if you
>>>> look at XULRunner Debian builds, it is supported by alpha amd64 arm
>>>> armel hppa i386 ia64 mips mipsel powerpc s390 sparc. I suppose that
>>>> other systems like BSD should work too. On the other hand, most of the
>>>> mobile platform are currently out of the game.
>>>>> Can I easily build tools
>>>>> that work equally well on OSX, Windows, and Linux without any "special
>>>>> case" checking, much like in a platform independent language?
>>>> XULRunner have some displaying issues, for example it doesn't show
>>>> lines in groupboxes on Linux. If some hacks will be necessary I expect
>>>> it will be solved inside the XULJet framework.
>>>>> Does it
>>>>> support any other platforms beyond those "big three"?
>>>> See above
>>>>> And, last, you
>>>>> write you can easily embed SVG and HTML - what about PDF files, can
>>>>> you view/display those through some plugin, maybe like the typical
>>>>> browser plugins?
>>>> I have no personal experience with it however it seem that it is possible:
>>>> -- Pavel
>>>>> Thanks,
>>>>> Florian
>>>> On 8 December 2010 22:58, Pavel Krivanek <>
>>>>> Hi all,
>>>>> I think you should pay attention XULJet framework [1]. This framework
>>>>> tries to facilitate the development of JavaScript applications on the
>>>>> Mozilla XULRunner runtime and it is maybe the most natural way how to
>>>>> develop desktop applications supported by CouchDB.
>>>>> Ajax requests have no limited destinations in XULRunner and with other
>>>>> privileges (access to local files, execution of local processes...) it
>>>>> provides an easy-to-use platform for desktop applications with native
>>>>> look&feel.
>>>>> Because the applications are written in JavaScript it is really very
>>>>> easy to work with CouchDB.
>>>>> XULJet has this main features:
>>>>> - component-based structure that increases reuseability of the code
>>>>> - readable description of GUI directly in JavaScript, no need of
>>>>> external XML files
>>>>> - powered by Google Closure Library that provides good modular system
>>>>> and additional tools
>>>>> - easy access to XUL elements using bindings to component properties
>>>>> - simple embedding of HTML and SVG
>>>>> - forms (they have no direct support in XUL)
>>>>> - simple generation of printed reports
>>>>> The archive with version 2.0.1 includes CouchDB library from Futon
>>>>> with small modifications for the Closure Library.
>>>>> [1]
>>>>> Cheers,
>>>>> -- Pavel Krivanek

View raw message