mirror of https://github.com/CrowCpp/Crow.git
1857 lines
48 KiB
HTML
1857 lines
48 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
|
|
|
|
<link rel="canonical" href="https://crowcpp.org/master/">
|
|
|
|
|
|
|
|
<link rel="next" href="getting_started/setup/linux/">
|
|
|
|
|
|
<link rel="icon" href="assets/favicon.svg">
|
|
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.21">
|
|
|
|
|
|
|
|
<title>Crow</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="assets/stylesheets/main.66ac8b77.min.css">
|
|
|
|
|
|
<link rel="stylesheet" href="assets/stylesheets/palette.06af60db.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="stylesheets/colors.css">
|
|
|
|
<link rel="stylesheet" href="stylesheets/latofonts.css">
|
|
|
|
<link rel="stylesheet" href="stylesheets/extra.css">
|
|
|
|
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Matomo -->
|
|
<script>
|
|
var _paq = window._paq = window._paq || [];
|
|
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
|
_paq.push(['trackPageView']);
|
|
_paq.push(['enableLinkTracking']);
|
|
(function() {
|
|
var u="//thee.dev/matomo/";
|
|
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
|
_paq.push(['setSiteId', '1']);
|
|
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
|
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
|
})();
|
|
</script>
|
|
|
|
<noscript>
|
|
<img referrerpolicy="no-referrer-when-downgrade" src="https://thee.dev/matomo/matomo.php?idsite=1&rec=1&action_name=Home" style="border:0" alt="" />
|
|
</noscript>
|
|
<!-- End Matomo Code -->
|
|
|
|
<script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
|
|
|
|
|
|
|
|
|
|
|
|
<meta property="og:title" content="CrowCpp"/>
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:description" content="A Fast and Easy to use microframework for the web."/>
|
|
<meta name="description" content="Crow is a C++ framework for creating HTTP or Websocket web services. It uses routing similar to Python's Flask which makes it easy to use. It is also extremely fast, beating multiple existing C++ frameworks as well as non C++ frameworks.">
|
|
<meta property="og:image" content="assets/og_img.png" />
|
|
<meta property="og:url" content="https://crowcpp.org">
|
|
<meta property="twitter:card" content="summary_large_image">
|
|
<meta property="twitter:image" content="assets/og_img.png">
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="crow-light" data-md-color-primary="indigo" data-md-color-accent="indigo">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</div>
|
|
|
|
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
|
|
|
|
</div>
|
|
|
|
|
|
<!--
|
|
Copyright (c) 2016-2021 Martin Donath <martin.donath@squidfunk.com>
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to
|
|
deal in the Software without restriction, including without limitation the
|
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
sell copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
IN THE SOFTWARE.
|
|
-->
|
|
|
|
<!-- Header -->
|
|
<header class="md-header" data-md-component="header">
|
|
<nav
|
|
class="md-header__inner md-grid"
|
|
aria-label="header.title"
|
|
>
|
|
|
|
<!-- Link to home -->
|
|
<a
|
|
href="."
|
|
title="Crow"
|
|
class="md-header__button md-logo"
|
|
aria-label="Crow"
|
|
data-md-component="logo"
|
|
>
|
|
|
|
<img src="assets/favicon.svg" alt="logo">
|
|
|
|
</a>
|
|
|
|
<!-- Button to open drawer -->
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
|
|
</label>
|
|
|
|
<!-- Header title -->
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
Crow
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
Home
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Color palette -->
|
|
|
|
<form class="md-header__option" data-md-component="palette">
|
|
|
|
|
|
|
|
<input
|
|
class="md-option"
|
|
data-md-color-media="(prefers-color-scheme: light)"
|
|
data-md-color-scheme="crow-light"
|
|
data-md-color-primary=""
|
|
data-md-color-accent=""
|
|
|
|
aria-label="Using Light Theme"
|
|
|
|
type="radio"
|
|
name="__palette"
|
|
id="__palette_1"
|
|
/>
|
|
|
|
<label
|
|
class="md-header__button md-icon"
|
|
title="Using Light Theme"
|
|
for="__palette_2"
|
|
hidden
|
|
>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391l-19.9 107.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121l19.9-107.9c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1l90.3-62.3c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1-192 0zm224 0a128 128 0 1 0-256 0 128 128 0 1 0 256 0z"/></svg>
|
|
</label>
|
|
|
|
|
|
|
|
|
|
<input
|
|
class="md-option"
|
|
data-md-color-media="(prefers-color-scheme: dark)"
|
|
data-md-color-scheme="crow-dark"
|
|
data-md-color-primary=""
|
|
data-md-color-accent=""
|
|
|
|
aria-label="Using Dark Theme"
|
|
|
|
type="radio"
|
|
name="__palette"
|
|
id="__palette_2"
|
|
/>
|
|
|
|
<label
|
|
class="md-header__button md-icon"
|
|
title="Using Dark Theme"
|
|
for="__palette_1"
|
|
hidden
|
|
>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M223.5 32C100 32 0 132.3 0 256s100 224 223.5 224c60.6 0 115.5-24.2 155.8-63.4 5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1 2.6-96.9 0-175.5-78.8-175.5-176 0-65.8 36-123.1 89.3-153.3 6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-6.3-.5-12.6-.8-19-.8z"/></svg>
|
|
</label>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
<!-- Site language selector -->
|
|
|
|
|
|
<!-- Button to open search modal -->
|
|
|
|
|
|
<div class="md-header__source">
|
|
<a class="md-source" href="https://opencollective.com/crow" style="padding-left:2.4rem;"><img style="border-radius: 5px" alt="Open Collective" src="https://img.shields.io/opencollective/all/crow?label=Support%20Crow&color=important&labelColor=122027&logo=opencollective&style=for-the-badge"></a>
|
|
</div>
|
|
|
|
<!-- Repository information -->
|
|
|
|
<div class="md-header__source">
|
|
<a href="https://github.com/CrowCpp/Crow" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96zM265.8 407.7c0-1.8 0-6 .1-11.6.1-11.4.1-28.8.1-43.7 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6s-28.4 1.9-41.6 5.6c0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 9 .1 21.7.1 30.6 0 4.8.1 8.6.1 10 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3-8.4 1.5-11.5-3.7-11.5-8zm-90.5-54.8c-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3-1.9.4-3.7-.4-3.9-1.7zm-9.1 3.2c-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4 0 1.3-1.5 2.4-3.5 2.4zm-14.3-2.2c-1.9-.4-3.2-1.9-2.8-3.2s2.4-1.9 4.1-1.5c2 .6 3.3 2.1 2.8 3.4-.4 1.3-2.4 1.9-4.1 1.3zm-12.5-7.3c-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1-.9 1.1-2.8.9-4.3-.6zm-8.5-10c-1.1-1.5-1.1-3.2 0-3.9 1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1-.9.6-2.6 0-3.7-1.5zm-6.3-8.8c-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5-.9.9-2.4.4-3.5-.6zm-6-6.4c-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6-.4.9-1.7 1.1-2.8.4z"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
CrowCpp/Crow
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
|
|
</nav>
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
|
<div class="md-grid">
|
|
<ul class="md-tabs__list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item md-tabs__item--active">
|
|
<a href="." class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
Home
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="getting_started/setup/linux/" class="md-tabs__link">
|
|
|
|
|
|
Getting Started
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="guides/app/" class="md-tabs__link">
|
|
|
|
|
|
Guides
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="reference/" class="md-tabs__link">
|
|
|
|
|
|
API Reference
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
<!-- Main navigation -->
|
|
|
|
<div
|
|
class="md-sidebar md-sidebar--primary"
|
|
data-md-component="sidebar"
|
|
data-md-type="navigation"
|
|
hidden
|
|
>
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a href="." title="Crow" class="md-nav__button md-logo" aria-label="Crow" data-md-component="logo">
|
|
|
|
<img src="assets/favicon.svg" alt="logo">
|
|
|
|
</a>
|
|
Crow
|
|
</label>
|
|
|
|
<div class="md-nav__source">
|
|
<a href="https://github.com/CrowCpp/Crow" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96zM265.8 407.7c0-1.8 0-6 .1-11.6.1-11.4.1-28.8.1-43.7 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6s-28.4 1.9-41.6 5.6c0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 9 .1 21.7.1 30.6 0 4.8.1 8.6.1 10 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3-8.4 1.5-11.5-3.7-11.5-8zm-90.5-54.8c-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3-1.9.4-3.7-.4-3.9-1.7zm-9.1 3.2c-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4 0 1.3-1.5 2.4-3.5 2.4zm-14.3-2.2c-1.9-.4-3.2-1.9-2.8-3.2s2.4-1.9 4.1-1.5c2 .6 3.3 2.1 2.8 3.4-.4 1.3-2.4 1.9-4.1 1.3zm-12.5-7.3c-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1-.9 1.1-2.8.9-4.3-.6zm-8.5-10c-1.1-1.5-1.1-3.2 0-3.9 1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1-.9.6-2.6 0-3.7-1.5zm-6.3-8.8c-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5-.9.9-2.4.4-3.5-.6zm-6-6.4c-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6-.4.9-1.7 1.1-2.8.4z"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
CrowCpp/Crow
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active">
|
|
|
|
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
<a href="." class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Home
|
|
</span>
|
|
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Getting Started
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Getting Started
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_2_1" id="__nav_2_1_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Setup
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_1_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_2_1">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Setup
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="getting_started/setup/linux/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Linux
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="getting_started/setup/macos/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
MacOS
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="getting_started/setup/windows/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Windows
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="getting_started/your_first_application/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Your First Application
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="getting_started/a_simple_webpage/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
A Simple Webpage
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Guides
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Guides
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Different parts of Crow
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_3_1">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Different parts of Crow
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/app/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
App
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/routes/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Routes
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/logging/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Logging
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/json/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
JSON
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/templating/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Templating (Mustache)
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/multipart/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Multipart
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/query-string/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Query Strings
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/middleware/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Middleware
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/ssl/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
SSL
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/static/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Static Files
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/blueprints/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Blueprints
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/compression/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Compression
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/websockets/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Websockets
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/base64/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Base64
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/testing/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Writing Tests
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Using Crow
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_3_2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Using Crow
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/auth/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
HTTP Authorization
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/included-middleware/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Included Middlewares
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Server setup
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_3_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Server setup
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/proxies/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Proxies
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="guides/syste/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Systemd run on startup
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
API Reference
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_4">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
API Reference
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="reference/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
API Reference
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- Table of contents -->
|
|
|
|
|
|
|
|
<div class="md-content" data-md-component="content">
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
<style>
|
|
.clogo{
|
|
width: 50%;
|
|
margin-inline: auto;
|
|
display: block;
|
|
}
|
|
|
|
.ccard{
|
|
border-style: solid;
|
|
border-width: .1rem;
|
|
border-color: var(--home-border-color);
|
|
border-radius: 0.5rem;
|
|
width: 10rem;
|
|
height: 12rem;
|
|
box-shadow: 2px 5px 5px var(--home-shadow-color);
|
|
margin-inline: 1.5rem;
|
|
margin-bottom: 1rem;
|
|
display: inline-block;
|
|
transition: transform 0.3s;
|
|
}
|
|
|
|
.ccard:hover{
|
|
transform: scale(1.1);
|
|
}
|
|
|
|
.ccard__image{
|
|
max-width: 7.5rem;
|
|
max-height: 7.5rem;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
display: block;
|
|
margin-top: 1rem;
|
|
padding-bottom: 0.5rem;
|
|
border-bottom: solid;
|
|
border-width: 0.1rem;
|
|
border-image-slice: 1;
|
|
border-image-source: var(--home-image-border);
|
|
}
|
|
|
|
.ccard__text{
|
|
text-align: center;
|
|
}
|
|
|
|
.csection{
|
|
text-align: center;
|
|
}
|
|
|
|
.ssection{
|
|
display:flex;
|
|
justify-content: center;
|
|
}
|
|
|
|
.sdescription{
|
|
display:flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 50%;
|
|
height: 14rem;
|
|
}
|
|
|
|
.scontent{
|
|
display:flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 50%;
|
|
height: 14rem;
|
|
}
|
|
.highlight{
|
|
width: 100%
|
|
}
|
|
|
|
.sbuttons{
|
|
display: block;
|
|
text-align: center;
|
|
}
|
|
|
|
.crow-button{
|
|
margin: 1rem 1rem;
|
|
}
|
|
|
|
code{
|
|
border-radius: 0.3rem !important;
|
|
}
|
|
|
|
.dcard{
|
|
width: 10rem;
|
|
height: 14rem;
|
|
margin-inline: 0.5rem;
|
|
display: inline-block;
|
|
transition: transform 0.3s;
|
|
}
|
|
|
|
.dcard:hover{
|
|
transform: scale(1.1);
|
|
}
|
|
|
|
.dcard__image{
|
|
max-width: 7.5rem;
|
|
max-height: 7.5rem;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
display: block;
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.dcard__title{
|
|
font-size: 1.25rem;
|
|
margin: 0px 0px;
|
|
text-align: center;
|
|
}
|
|
|
|
.dcard__description{
|
|
font-size: 0.75rem;
|
|
margin: 0.1rem 0px;
|
|
text-align: center;
|
|
display: block;
|
|
min-height: 50px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.md-footer-copyright {
|
|
color: var(--md-footer-fg-color--light);
|
|
font-size: .64rem;
|
|
margin: auto .6rem;
|
|
padding: .4rem 0;
|
|
}
|
|
|
|
</style>
|
|
<img class="clogo" alt="logo" src="assets/crowlogo_main_color.svg#only-light">
|
|
<img class="clogo" alt="logo" src="assets/crowlogo_main_light_color.svg#only-dark">
|
|
|
|
<h1 style="text-align:center;">A Fast and Easy to use microframework for the web.</h1>
|
|
|
|
<hr>
|
|
<p style="text-align:center;">Crow is a C++ framework for creating HTTP or Websocket web services. It uses routing similar to Python's Flask which makes it easy to use. It is also extremely fast, beating multiple existing C++ frameworks as well as non C++ frameworks.</p>
|
|
<hr>
|
|
|
|
<section class="csection">
|
|
<div class="ccard">
|
|
<img class="ccard__image" src= assets/fast_icon.svg#only-light>
|
|
<img class="ccard__image" src= assets/fast_light_icon.svg#only-dark>
|
|
<p class="ccard__text">Blazingly Fast</p>
|
|
</div>
|
|
<div class="ccard">
|
|
<img class="ccard__image" src= assets/header_icon.svg#only-light>
|
|
<img class="ccard__image" src= assets/header_light_icon.svg#only-dark>
|
|
<p class="ccard__text">Header Only</p>
|
|
</div>
|
|
<div class="ccard">
|
|
<img class="ccard__image" src= assets/typesafe_icon.svg#only-light>
|
|
<img class="ccard__image" src= assets/typesafe_light_icon.svg#only-dark>
|
|
<p class="ccard__text">Typesafe handlers</p>
|
|
</div>
|
|
<div class="ccard">
|
|
<img class="ccard__image" src= assets/websocket_icon.svg#only-light>
|
|
<img class="ccard__image" src= assets/websocket_light_icon.svg#only-dark>
|
|
<p class="ccard__text">Websocket Support</p>
|
|
</div>
|
|
</section>
|
|
|
|
|
|
<hr>
|
|
|
|
<section class="ssection">
|
|
<div class="sdescription">
|
|
<h2 style="text-align: center;">Easy to get started</h2>
|
|
</div>
|
|
<div class="scontent">
|
|
<div class="highlight"><pre id="__code_0"><span></span><button class="md-clipboard md-icon" title="Copy to clipboard" data-clipboard-target="#__code_0 > code"></button><code><span class="cp">#include</span> <span class="cpf">"crow.h"</span><span class="cp"></span>
|
|
|
|
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
|
|
<span class="p">{</span>
|
|
<span class="n">crow</span><span class="o">::</span><span class="n">SimpleApp</span> <span class="n">app</span><span class="p">;</span>
|
|
|
|
<span class="cp">CROW_ROUTE</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="s">"/"</span><span class="p">)([](){</span>
|
|
<span class="k">return</span> <span class="s">"Hello world"</span><span class="p">;</span>
|
|
<span class="p">});</span>
|
|
|
|
<span class="n">app</span><span class="p">.</span><span class="n">port</span><span class="p">(</span><span class="mi">18080</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
|
|
<span class="p">}</span>
|
|
</code></pre></div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="ssection">
|
|
<div class="scontent">
|
|
<div class="highlight"><pre id="__code_1"><span></span><button class="md-clipboard md-icon" title="Copy to clipboard" data-clipboard-target="#__code_1 > code"></button><code><span class="cp">CROW_ROUTE</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="s">"/json"</span><span class="p">)</span>
|
|
<span class="p">([]{</span>
|
|
<span class="n">crow</span><span class="o">::</span><span class="n">json</span><span class="o">::</span><span class="n">wvalue</span> <span class="n">x</span><span class="p">({{</span><span class="s">"message"</span><span class="p">,</span> <span class="s">"Hello, World!"</span><span class="p">}});</span>
|
|
<span class="n">x</span><span class="p">[</span><span class="s">"message2"</span><span class="p">]</span> <span class="o">=</span> <span class="s">"Hello, World.. Again!"</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="n">x</span><span class="p">;</span>
|
|
<span class="p">});</span>
|
|
</code></pre></div>
|
|
</div>
|
|
<div class="sdescription">
|
|
<h2 style="text-align: center;">JSON Support Built-in</h2>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
<section class="ssection">
|
|
<div class="sdescription">
|
|
<h2 style="text-align: center;">URL parameter support as well!</h2>
|
|
</div>
|
|
<div class="scontent">
|
|
<div class="highlight"><pre id="__code_2"><span></span><button class="md-clipboard md-icon" title="Copy to clipboard" data-clipboard-target="#__code_2 > code"></button><code><span class="cp">CROW_ROUTE</span><span class="p">(</span><span class="n">app</span><span class="p">,</span><span class="s">"/hello/<int>"</span><span class="p">)</span>
|
|
<span class="p">([](</span><span class="kt">int</span> <span class="n">count</span><span class="p">){</span>
|
|
<span class="k">return</span> <span class="n">crow</span><span class="o">::</span><span class="n">response</span><span class="p">(std::to_string(count));</span></span>
|
|
<span class="p">});</span>
|
|
</code></pre></div>
|
|
</div>
|
|
</section>
|
|
|
|
<hr>
|
|
|
|
<h1 style="text-align:center;">Support Crow</h1>
|
|
<h3 style="text-align:center;">Crow is provided free of charge courtesy of everyone who is donating their money, time, and expertise to keep it going.<h3>
|
|
<h3 style="text-align:center;">Help us make something great!</h3>
|
|
|
|
<dev class="sbuttons" id="contributors">
|
|
</dev>
|
|
<dev class="sbuttons">
|
|
<a href="https://opencollective.com/crow" title="Crow - OpenCollective" class="md-button crow-button">Fund Crow</a>
|
|
<a href="https://github.com/CrowCpp/Crow" title="Crow - OpenCollective" class="md-button crow-button">Develop Crow</a>
|
|
<a href="https://gitter.im/crowfork/community" title="Crow - OpenCollective" class="md-button crow-button">Chat with us</a>
|
|
</dev>
|
|
|
|
<hr>
|
|
<h1 style="text-align:center;">Get Crow</h1>
|
|
<h3 style="text-align:center;">Crow is everywhere, you just need to grab it!<h3>
|
|
|
|
<section class="csection">
|
|
|
|
<div class="dcard">
|
|
<a href="https://github.com/CrowCpp/Crow/releases/latest">
|
|
<img class="dcard__image" src="assets/pkg_logos/ubuntu.png">
|
|
<p class="dcard__title">.deb file</p>
|
|
<p class="dcard__description">for Ubuntu/Debian based systems</p>
|
|
</a>
|
|
</div>
|
|
|
|
<div class="dcard">
|
|
<a href="https://aur.archlinux.org/packages/crow">
|
|
<img class="dcard__image" src="assets/pkg_logos/arch.png">
|
|
<p class="dcard__title">AUR</p>
|
|
<p class="dcard__description">for Arch Linux based systems</p>
|
|
</a>
|
|
</div>
|
|
|
|
<div class="dcard">
|
|
<a href="https://vcpkg.io">
|
|
<img class="dcard__image" src="assets/pkg_logos/vcpkg.png">
|
|
<p class="dcard__title">VCPKG</p>
|
|
<p class="dcard__description">for Windows systems</p>
|
|
</a>
|
|
</div>
|
|
|
|
<div class="dcard">
|
|
<a href="https://conan.io/center/crowcpp-crow">
|
|
<img class="dcard__image" src="assets/pkg_logos/conan.png">
|
|
<p class="dcard__title">Conan Center</p>
|
|
<p class="dcard__description">for developers using the conan package manager</p>
|
|
</a>
|
|
</div>
|
|
|
|
<div class="dcard">
|
|
<a href="https://github.com/CrowCpp/Crow/releases/latest">
|
|
<img class="dcard__image" src="assets/pkg_logos/github.png">
|
|
<p class="dcard__title">Header File</p>
|
|
<p class="dcard__description">Download Crow directly from github</p>
|
|
</a>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
<hr>
|
|
<h1 style="text-align:center;">Learn Crow</h1>
|
|
<h3 style="text-align:center;">The 1000 mile journey begins with a single step. Get started by installing Crow and building you first application. Or go through the guides if you're stuck somewhere.<h3>
|
|
|
|
<dev class="sbuttons">
|
|
<a href="getting_started/setup/" title="Get Started" class="md-button crow-button">Get Started</a>
|
|
<a href="guides/app/" title="Guides" class="md-button crow-button">Guides</a>
|
|
<a href="reference/index.html" title="API Reference" class="md-button crow-button">API Reference</a>
|
|
</dev>
|
|
|
|
|
|
<script>
|
|
let text = "";
|
|
|
|
function convertRemToPixels(rem) {
|
|
return rem * parseFloat(getComputedStyle(document.documentElement).fontSize);
|
|
}
|
|
|
|
function makeCard(name, img_url, ref, size = 6)
|
|
{
|
|
let finalName = fixLong(name);
|
|
if (img_url == null)
|
|
{
|
|
img_url = AvatarImage(name);
|
|
}
|
|
return `<a title="${name}" href="${ref}" style=\"border-style: solid;border-width: .1rem;border-color: var(--home-border-color);border-radius: ${size/12}rem;width: ${size}rem;height: ${size}rem;box-shadow: 2px 5px 5px var(--home-shadow-color);margin-inline: ${size/12}rem;margin-bottom: ${size/12}rem;margin-top: ${size/12}rem;display: inline-block;\"><img style=\"width: ${size/2}rem;height: ${size/2}rem; border-radius: ${size/10}rem;margin-left: auto;margin-right: auto;display: block;margin-top: ${size/7.7}rem;\" src=\"${img_url}\"><p style=\"text-align: center;font-size: ${size/7.7}rem;\">${finalName}</p></a>`;
|
|
}
|
|
|
|
function fixLong(name)
|
|
{
|
|
if (name.length > 12)
|
|
{
|
|
name = name.slice(0,9);
|
|
name += "...";
|
|
}
|
|
return name;
|
|
}
|
|
|
|
function GetColor(name)
|
|
{
|
|
var r = 0;
|
|
var g = 0;
|
|
var b = 0;
|
|
if (name.length >= 3)
|
|
{
|
|
var i = 0;
|
|
for (i; i < name.length/3; i++)
|
|
{
|
|
r += name[i].charCodeAt();
|
|
}
|
|
r %= 256;
|
|
for (i; i < name.length*2/3; i++)
|
|
{
|
|
g += name[i].charCodeAt();
|
|
}
|
|
g %= 256;
|
|
for (i; i < name.length; i++)
|
|
{
|
|
b += name[i].charCodeAt();
|
|
}
|
|
b %= 256;
|
|
console.log(`rgb(${r},${g},${b})`);
|
|
return `rgb(${r},${g},${b})`;
|
|
}
|
|
return "rgb(0,0,0)";
|
|
}
|
|
|
|
function AvatarImage(name)
|
|
{
|
|
var letters = name.includes(' ') ? name[0] + name.split(' ').slice(-1)[0][0] : name.slice(0,2);
|
|
var canvas = document.createElement('canvas');
|
|
var context = canvas.getContext("2d");
|
|
var size = convertRemToPixels(3);
|
|
var color = GetColor(name);
|
|
canvas.width = size;
|
|
canvas.height = size;
|
|
context.font = Math.round(canvas.width / 2) + "px Arial";
|
|
context.textAlign = "center";
|
|
// Setup background and front color
|
|
context.fillStyle = color;
|
|
context.fillRect(0, 0, canvas.width, canvas.height);
|
|
|
|
// Check the color brightness (0-255)
|
|
color = color.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/);
|
|
r = color[1];
|
|
g = color[2];
|
|
b = color[3];
|
|
hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b));
|
|
|
|
context.fillStyle = hsp > 150 ? "#333" : "#EEE"; // 150 was reached by trial and error
|
|
context.fillText(letters, size / 2, size / 1.5);
|
|
// Set image representation in default format (png)
|
|
dataURI = canvas.toDataURL();
|
|
// Dispose canvas element
|
|
canvas = null;
|
|
return dataURI;
|
|
}
|
|
|
|
async function getGHData()
|
|
{
|
|
let x = await fetch("https://api.github.com/repos/crowcpp/crow/contributors?per_page=100");
|
|
let y = await x.json();
|
|
text += "<a href=\"https://github.com/CrowCpp/Crow\"><h2>Code Contributors</h2></a><section> ";
|
|
if (y.length != null)
|
|
{
|
|
for(var i = 0; i < y.length; i++){let item = y[i]; text += makeCard(item.login, item.avatar_url, item.html_url, 3.5);}
|
|
}
|
|
else
|
|
{
|
|
text += "<h3>GitHub won't let us show our awesome Code Contributors at the moment.</h3>"
|
|
}
|
|
text += "</section><br><br>";
|
|
}
|
|
|
|
async function getData()
|
|
{
|
|
let backers = [];
|
|
let boosters = [];
|
|
let sponsors = [];
|
|
let donations = [];
|
|
|
|
let x = await fetch("https://opencollective.com/crow/members/all.json");
|
|
let y = await x.json();
|
|
|
|
for (var i = 0; i < y.length; i++)
|
|
{
|
|
let item = y[i];
|
|
if (item.role === "BACKER") {
|
|
if(item.tier === "Backer"){
|
|
backers.push(item);
|
|
}
|
|
else if(item.tier === "Booster"){
|
|
boosters.push(item);
|
|
}
|
|
else if(item.tier === "Sponsor"){
|
|
sponsors.push(item);
|
|
}
|
|
else if(item.tier === "Donation"){
|
|
donations.push(item);
|
|
}
|
|
}
|
|
}
|
|
|
|
let ghx = await fetch("https://gh-sponsors-dsdpxxx9d-filiptronicek.vercel.app/sponsors/CrowCpp");
|
|
let ghy = await fetch("https://gh-sponsors-dsdpxxx9d-filiptronicek.vercel.app/count/CrowCpp");
|
|
let ghsponsors = await ghx.json();
|
|
ghsponsors = ghsponsors.sponsors;
|
|
let ghx_count = await ghy.json();
|
|
ghx_count = ghx_count.sponsors.count;
|
|
|
|
if (ghx_count > ghsponsors.length)
|
|
{
|
|
let priv_count = ghx_count - ghsponsors.length;
|
|
ghsponsors.push({handle: priv_count = 1 ? "Private sponsor" : `${priv_count} Private sponsors`, avatar:null, profile:"https://github.com/CrowCpp"});
|
|
}
|
|
|
|
|
|
text += "<section style=\"text-align: center;\"><a href=\"https://opencollective.com/crow/contribute/sponsor-30717/checkout\"><h2>Sponsors</h2></a>";
|
|
for(var i = 0; i < sponsors.length; i++){let item = sponsors[i]; text += makeCard(item.name, item.image, item.profile, 10);}
|
|
|
|
text += "</section><br><section style=\"text-align: center;\"><a href=\"https://opencollective.com/crow/contribute/booster-30767/checkout\"><h2>Boosters</h2></a>";
|
|
for(var i = 0; i < boosters.length; i++){let item = boosters[i]; text += makeCard(item.name, item.image, item.profile, 5);}
|
|
|
|
text += "</section><br><section style=\"text-align: center;\"><a href=\"https://opencollective.com/crow/contribute/backer-30716/checkout\"><h2>Backers</h2></a>";
|
|
for(var i = 0; i < backers.length; i++){let item = backers[i]; text += makeCard(item.name, item.image, item.profile, 3.5);}
|
|
|
|
text += "</section><br><section style=\"text-align: center;\"><a href=\"https://opencollective.com/crow/contribute/donation-30769/checkout\"><h2>Donations</h2></a>";
|
|
for(var i = 0; i < donations.length; i++){let item = donations[i]; text += makeCard(item.name, item.image, item.profile, 3.5);}
|
|
|
|
text += "</section><br><section style=\"text-align: center;\"><a href=\"https://github.com/sponsors/CrowCpp\"><h2>GitHub Sponsors</h2></a>";
|
|
for(var i = 0; i < ghsponsors.length; i++){let item = ghsponsors[i]; text += makeCard(item.handle, item.avatar, item.profile, 5);}
|
|
|
|
text += "</section><section style=\"text-align: center;\">";
|
|
await getGHData();
|
|
text += "</section>";
|
|
document.getElementById("contributors").innerHTML = text;
|
|
}
|
|
|
|
getData();
|
|
</script>
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
</main>
|
|
|
|
|
|
<footer class="md-footer">
|
|
<!-- Further information -->
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
|
|
<!-- Copyright and theme information -->
|
|
<div class="md-footer-copyright" style="flex: 1;display: flex;justify-content: left;">
|
|
|
|
<div class="md-footer-copyright__highlight">
|
|
Copyright © 2020-2023 CrowCpp
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<a style="margin: auto .6rem; font-size: .64rem;text-align: center;flex: 1;display: flex;justify-content: center;" href="privacy_policy.html">Privacy Policy</a>
|
|
|
|
<!-- Social links -->
|
|
<!--
|
|
Copyright (c) 2016-2022 Martin Donath <martin.donath@squidfunk.com>
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to
|
|
deal in the Software without restriction, including without limitation the
|
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
sell copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
IN THE SOFTWARE.
|
|
-->
|
|
|
|
<!-- Social links -->
|
|
<div class="md-social" style="flex: 1;display: flex;justify-content: right;">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a
|
|
href="https://github.com/crowcpp/crow"
|
|
target="_blank" rel="noopener"
|
|
title="github.com"
|
|
class="md-social__link"
|
|
>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
|
|
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a
|
|
href="https://gitter.im/crowfork/community"
|
|
target="_blank" rel="noopener"
|
|
title="gitter.im"
|
|
class="md-social__link"
|
|
>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z"/></svg>
|
|
</a>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
|
|
<script id="__config" type="application/json">{"base": ".", "features": ["navigation.tabs", "content.code.annotate"], "search": "assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"default": "latest", "provider": "mike"}}</script>
|
|
|
|
|
|
<script src="assets/javascripts/bundle.a7c05c9e.min.js"></script>
|
|
|
|
|
|
</body>
|
|
</html> |