A framework for creating native cross-platform, multi-process desktop applications

Work has begun on the Swift/Cocoa UI...Mac OS X screenshot coming soon!

GelDesk turns this...

into this...

 

How it works

GelDesk is a dynamic, native desktop UI that can be controlled from any programming language. The user interface is executed in its own process while programming logic is executed in one (or more) other processes. It can be integrated with any language that can use JSON and some form of inter-process communication (IPC).

 

GitHub »

(Project is currently in the alpha stage.)

 

Features

For now you can see where each feature is encoded in the JSON, before it is expanded and sent over IPC to the native UI process. (Better visual representation is forthcoming!)

 

Declarative UI

Abstract Components

Data and Command Binding

Simple Docking Layout

System Browser or WebKit

High Performance Data Grid

 

API

Here is a sample of the API for Node.js. GelDesk runs the Node app, which communicates back to GelDesk via a line-delimited JSON RPC system that can work with any type of IPC, such as standard I/O, domain sockets or named pipes.

app.js 
 'use strict';
var geldesk = require('geldesk');
var app = geldesk.app();
var createView = require('./views/main/window.js');

app.start()
.then(main);

function main() {
  var win = createView();
  win.on('resized', function() {
    console.log('win resized (OK)');
  });
  win.show()
    .then(function(result) {
      console.log(win.name() + ' window show,load (OK)');
    })
    .then(waitAndDoStuff());
}

function waitAndDoStuff(win) {
  return function() {
    var n = 10;
    console.log('Waiting for ' + n + ' seconds...');
    //console.log('Check out our window...');
    //console.dir(win);
    setTimeout(function() {
      win.close();
    }, n * 1000);
  };
}




views/main/window.js 
 'use strict';
var geldesk = require('geldesk');
var Component = geldesk.Component;
var Window = geldesk.ui.Window;

module.exports = function createView(name) {
  name = name || '';
  return Component.build([
    name + ':Window', {
      title: 'A native window',
      startPosition: 'center'
    },
    ['./data.js'],
    ['./commands.js'],
    ['./menu.js'],
    ['./toolbar.js'],
    ['status:Statusbar', null, ['label', {text: 'Ready'}]],
    ['./sidepanel.js'],
    [':Browser', {
      dock: 'fill',
      url: 'https://getbootstrap.com/examples/grid/'
      //url: 'http://whatsmyuseragent.com/'
      //url: 'https://www.whatismybrowser.com/'
      //url: 'http://960.gs/'
    }],
    [':DataGrid', {
      dock: 'bottom-split',
      columns: [
        'Column1',
        'Column2',
        'Column3'
      ]
    }]
  ], __dirname);
};

 

Take a look at the Node.js API code to see what else is going on. These files came from lab/basic.

 

Contribute to the project!

We are looking for contributors who can help make this project great! Please contribute in any way that you can.

So far, there is an alpha Node.js client, an alpha C#/WinForms UI and a good start on the alpha Swift/Cocoa UI. We need involvement on this before we go to beta so that we have a solid foundation to build on.

A Go (golang) client and a Python client are on the roadmap among many possible other languages. Some other important items on the roadmap are a GTK UI and a WPF front-end for the Windows UI. WPF will definitely happen, I can promise you that one!

Before we start building on more platforms though, it would be nice to have a well documented spec for the RPC system and the core components and a really solid implementation on the initial platforms (Node, WinForms, Cocoa).

 

GitHub »

 

Copyright @ Devoptix LLC 2016This site built with staticbuild.geldesk.org v0.0.1 (en)  Help