{% 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 %} {% include "partials/extrahead.html" %} {% 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 %}

Create purely native cross-platform user experiences with Boden

Boden empowers you to create native mobile cross-platform applications from a single codebase. It uses native widgets that match the look and feel users expect from their platform.

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 scripting, no virtual machine overhead. Using Boden is straightforward:

// 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;
}

Create flexible user interfaces with Flexbox layouts

Boden integrates Facebook's Yoga Layout engine, so creating UI layouts is a breeze on any platform. Simply define your layouts through Flexbox stylesheets directly in your C++ code and you're good to go.

// 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;
}

Use your existing programming skills

Boden builds upon mature technologies: no custom containers, no custom smart pointers, no steep learning curve. You focus on your app, Boden takes care of the rest.

{% 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" %}