Latest news:

Welcome to the Atlas toolkit web site

What is the Atlas toolkit?

The Atlas toolkit provides a new way to handle web front-ends in a manner which facilitates the prototyping of web applications. In particular:

  • by allowing to run web applications with minimal installation and no upload,
  • by offering a wide choice of languages for developing web front-ends.

Web applications based on the Atlas toolkit, when launched on any computer which has access to internet (no need to be accessible from internet), will be accessible from every device with an access to internet. You have nothing to upload or install on a remote server. Simply launch your web application on your computer connected to internet, and it will be accessible from everywhere on internet.

The Java, Node.js and PHP bindings are the proof that the Atlas toolkit can be provided for a large variety of languages. Works are in progress for the toolkit to be available for other languages, and if you wish to discuss about those perspectives, you are welcome to do so in this forum.

How does it look like?

Hello, World!

Here a view of the famous "Hello, World!" program made with the Atlas toolkit:

Hello World! preview

The corresponding source code for the different available languages:

Java source code

import info.q37.atlas.*;
import java.util.HashMap;
import java.nio.file.*;

class Hello extends Atlas {
  public void handle(DOM dom, String action, String id) {
    switch (action) {
    case "Connect":
      try {
        dom.setLayout("", new String(Files.readAllBytes(Paths.get("Main.html"))));
      } catch (Exception e) {
        System.out.println(e.getStackTrace());
      }
      break;
    case "Typing":
      dom.setContent("name", dom.getContent(id));
      break;
    case "Clear":
      if (dom.confirm("Are you sure ?"))
        dom.setContents(new HashMap<String, String>() {
          {
            put("input", "");
            put("name", "");
          }
        });
      break;
    default:
      throw new RuntimeException("Unknown action '" + action + "' !!!");
    }
  }

  public static void main(String[] args) throws Exception {
    launch("Connect");

    for (;;)
      new Hello();
  }
}

If you have the JDK installed on your computer, you can try it by following this simple steps:

JavaScript source code for Node.js

const atlas = require('atlastk');
const fs = require('fs');

const callbacks = {
  "Connect": (dom, id) => dom.setLayout("", fs.readFileSync("Main.html", "utf8")),
  "Typing": (dom, id) => dom.getContent(id,
    (name) => dom.setContent("name", name)),
  "Clear": (dom, id) => dom.confirm("Are you sure ?",
    (answer) => { if (answer) dom.setContents({ "input": "", "name": "" }) })
};

atlas.launch(() => new atlas.DOM(), "Connect", callbacks);

If you have Node.js installed on your computer, you can try it by following this simple steps:

PHP source code

<?php
require "phar://Atlas.phar/Atlas.php";

class Hello extends Threaded {
 public function handle($dom, $action, $id) {
  switch ($action) {
  case "Connect":
   $dom->setLayout("", file_get_contents("Main.html"));
   break;
  case "Typing":
   $dom->setContent("name", $dom->getContent($id));
   break;
  case "Clear":
   if ($dom->confirm("Are you sure?")) {
    $dom->setContents(["input" => "", "name" => ""]);
   }
   break;
  default:
   throw new Exception("Unknown action '" . $action . "' !!!");
  }
 }
}

function hello() {
 return new Hello();
}

Atlas::launch("Connect", 'hello');
?>

If you have PHP (with pthreads) installed on your computer, you can try it by following this simple steps:

HTML file

This is the content of the Main.html file, which content is given as parameter to the setLayout(...) function in above source codes.

<fieldset>
 <label>Name:</label>
 <input id="input" maxlength="20" placeholder="Enter a name here" type="text" data-xdh-onevent="input|Typing" />
 <button data-xdh-onevent="Clear">Clear</button>
 <hr />
 <h1>
  <span>Hello </span>
  <span style="font-style: italic;" id="name"></span>
  <!-- <span style="font-style: italic;" id="name" />   With this line rather then the above one,
  the following line becomes a child of the above tag !!! -->
  <span>!</span>
 </h1>
</fieldset>

The above Hello.(java|js|php) files don't need this HTML file as its (slightly modified) content is embedded in the source code.

TodoMVC

As an example, the application from the TodoMVC project has been developed using the Atlas toolkit. This is what it looks like:

The source code and the installation procedure are available at following addresses:

How does it work?

On the launching of the application, or to update broad parts of the interface, the needed HTML code is sent directly to the browser; this is very similar to a CGI based application. Otherwise, only the needed part of the DOM is updated, like a single-page application. With the Atlas toolkit, you have the best of both worlds.

The HTML code can be generated using XSLT, manually, or by using the template engine of your choice.

The application connects to a public server, which acts as a proxy between the web browser and the application running on your computer. That's why the computer which runs the application only needs an access to internet, and does not need to be accessible from internet.

Behind the Atlas toolkit

The lead developer behind the Atlas toolkit is Claude SIMON, a freelance software engineer who lives near Strasbourg, in France.

He developed C++ libraries to handle desktop user interfaces using XULRunner. As XULRunner were discontinued, he switched to the newly standardized HTML5, along with the Chromium Embedded Framework. The libraries were then improved to also handle web user interfaces. Finally, Electron replaced the Chromium Embedded Framework.

As most of the popular languages are interpreted ones, he also specialized in improving the performances of this languages, by developing binding libraries simplifying the use of the more efficient C++ native code with this languages.

About the Atlas toolkit

Others

License

The Atlas toolkit is free software, released under the GNU AGPL. If this license doesn't meet your needs, feel free to ask about another one on the contact page.