{% import "partials/language.html" as lang with context %} {% set feature = config.theme.feature %} {% set palette = config.theme.palette %} {% set font = config.theme.font %} {% block site_meta %} {% if page and page.meta and page.meta.description %} {% elif config.site_description %} {% endif %} {% if page and page.meta and page.meta.redirect %} {% elif page.canonical_url %} {% endif %} {% if page and page.meta and page.meta.author %} {% elif config.site_author %} {% endif %} {% for key in [ "clipboard.copy", "clipboard.copied", "search.language", "search.pipeline.stopwords", "search.pipeline.trimmer", "search.result.none", "search.result.one", "search.result.other", "search.result.other" ] %} {% endfor %} {% endblock %} {% block htmltitle %} {% if page and page.meta and page.meta.title %} {{ page.meta.title }} {% elif page and page.title and not page.is_homepage %} {{ page.title }} - {{ config.site_name }} {% else %} {{ config.site_name }} {% endif %} {% endblock %} {% block styles %} {% if palette.primary or palette.accent %} {% endif %} {% if palette.primary %} {% import "partials/palette.html" as map %} {% set primary = map.primary( palette.primary | replace(" ", "-") | lower ) %} {% endif %} {% endblock %} {% block libs %} {% endblock %} {% block fonts %} {% if font != false %} {% endif %} {% endblock %} {% if config.extra.manifest %} {% endif %} {% for path in config["extra_css"] %} {% endfor %} {% block analytics %} {% if config.google_analytics %} {% include "partials/integrations/analytics.html" %} {% endif %} {% endblock %} {% block extrahead %}{% endblock %} {% if palette.primary or palette.accent %} {% set primary = palette.primary | replace(" ", "-") | lower %} {% set accent = palette.accent | replace(" ", "-") | lower %} {% else %} {% endif %} {% set platform = config.extra.repo_icon or config.repo_url %} {% if "github" in platform %} {% include "assets/images/icons/github.f0b8504a.svg" %} {% elif "gitlab" in platform %} {% include "assets/images/icons/gitlab.6dd19c00.svg" %} {% elif "bitbucket" in platform %} {% include "assets/images/icons/bitbucket.1b09e088.svg" %} {% endif %} {% if page.toc | first is defined %} {{ lang.t('skip.link.title') }} {% endif %} {% block header %} {% include "partials/header.html" %} {% endblock %}
{% block hero %} {% if page and page.meta and page.meta.hero %} {% include "partials/hero.html" with context %} {% endif %} {% endblock %} {% if feature.tabs %} {% include "partials/tabs.html" %} {% endif %}

Boden

Cross-Platform Framework

{% block site_nav %} {% if nav %}
{% include "partials/nav.html" %}
{% endif %} {% if page.toc %}
{% include "partials/toc.html" %}
{% endif %} {% endblock %}
{% block content %}

Build purely native cross-platform user experiences with Boden

With Boden you can create native mobile cross-platform applications from one codebase. Boden uses the real user interface controls of the target platform, so users won't recognize any difference to the look and feel they are already used to.

Compile native apps from a single C++17 codebase

Write your mobile apps in modern C++17 and compile 100% native Android and iOS apps from a single statically typed codebase. No need for scripting. No overhead introduced by virtual machines. Using Boden is straight forward:

// MainViewController.cpp
#include <bdn/ui.h>
#include <bdn/ui/yoga.h>

#include "MainViewController.h"

using namespace bdn;
using namespace bdn::ui;

MainViewController::MainViewController()
{
    _window = std::make_shared<Window>();
    _window->title = "AwesomeApp";
    _window->geometry = Rect{0, 0, 400, 300};
    _window->setLayout(std::make_shared<yoga::Layout>());

    auto button = std::make_shared<Button>();
    button->label = "Hello World";

    _window->contentView = button;

    _window->visible = true;
}

Lay out your user interface with Flexbox layouts

With Boden laying out your UI is a breeze. Just define your layouts using Flexbox stylesheets directly in C++. Boden uses Facebook's Yoga Layout engine accross all platforms.

// MainViewController.cpp
#include <bdn/ui.h>
#include <bdn/ui/yoga.h>

#include "MainViewController.h"

using namespace bdn;
using namespace bdn::ui;

MainViewController::MainViewController()
{
    _window = std::make_shared<Window>();
    _window->title = "AwesomeApp";
    _window->geometry = Rect{0, 0, 400, 300};
    _window->setLayout(std::make_shared<yoga::Layout>());
    _window->stylesheet =
                FlexJsonStringify({
                                      "justifyContent": "Center", 
                                      "alignItems": "Center"
                                  });

    std::shared_ptr<Button> button = std::make_shared<Button>();
    button->label = "Hello World";

    _window->contentView = button;
    _window->visible = true;
}

Reuse your existing programming skills

Boden builds upon well-established technologies and best practices where possible. A Boden string literally is an std::string. No custom containers, smart pointers, or reinvented basics. This allows you to reuse your existing knowledge and focus on what's most important: your app.

{% endblock %}
{% block footer %} {% include "partials/footer.html" %} {% endblock %}
{% block scripts %} {% if lang.t("search.language") != "en" %} {% set languages = lang.t("search.language").split(",") %} {% if languages | length and languages[0] != "" %} {% set path = "assets/javascripts/lunr/" %} {% for language in languages | map("trim") %} {% if language != "en" %} {% if language == "jp" %} {% endif %} {% if language in ("da", "de", "du", "es", "fi", "fr", "hu", "it", "jp", "no", "pt", "ro", "ru", "sv", "tr") %} {% endif %} {% endif %} {% endfor %} {% if languages | length > 1 %} {% endif %} {% endif %} {% endif %} {% for path in config["extra_javascript"] %} {% endfor %} {% endblock %} {% include "partials/cookie-consent.html" %} {% include "partials/integrations/analytics_noscript.html" %}