index.html 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915
  1. <!DOCTYPE html>
  2. <!-- saved from url=(0018)https://rocket.rs/ -->
  3. <html>
  4. <link type="text/css" rel="stylesheet" id="dark-mode-general-link" /><link
  5. type="text/css"
  6. rel="stylesheet"
  7. id="dark-mode-custom-link"
  8. /><style lang="en" type="text/css" id="dark-mode-custom-style"></style
  9. ><head>
  10. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  11. <meta name="viewport" content="width=device-width" />
  12. <title>Dioxus - Simple, Fast, Type-Safe Web Framework for Rust</title>
  13. <meta
  14. name="description"
  15. content="Dioxus is a web framework for the Rust
  16. programming language that makes it simple to write fast web applications
  17. without sacrificing flexibility or type safety."
  18. />
  19. <meta name="author" content="Sergio Benitez" />
  20. <link href="./rocketsrchrome_files/css" rel="stylesheet" />
  21. <link
  22. rel="stylesheet"
  23. href="./rocketsrchrome_files/style.css"
  24. media="all"
  25. />
  26. <link
  27. rel="icon"
  28. type="image/png"
  29. href="https://rocket.rs/v0.4/images/favicon-32x32.png"
  30. sizes="32x32"
  31. />
  32. <link
  33. rel="icon"
  34. type="image/png"
  35. href="https://rocket.rs/v0.4/images/favicon-16x16.png"
  36. sizes="16x16"
  37. />
  38. <style media="screen">
  39. #logo {
  40. background-image: url(/v0.4/images/logo.svg);
  41. }
  42. @media (max-width: 870px) {
  43. #logo {
  44. background-image: url(/v0.4/images/logo-small.svg);
  45. }
  46. }
  47. input#search-input {
  48. background-image: url(/v0.4/images/search-icon.svg);
  49. }
  50. .cancel-search {
  51. background: url(/v0.4/images/cancel-icon.svg) no-repeat center;
  52. }
  53. .admonition.note .title {
  54. background-image: url(/v0.4/images/pencil-icon.svg);
  55. }
  56. .admonition.tip .title {
  57. background-image: url(/v0.4/images/star-icon.svg);
  58. }
  59. .admonition.warning .title {
  60. background-image: url(/v0.4/images/warning-icon.svg);
  61. }
  62. </style>
  63. </head>
  64. <body>
  65. <header>
  66. <div id="clouds">
  67. <img
  68. src="./rocketsrchrome_files/cloud-0.png"
  69. class="cloud back"
  70. style="
  71. width: 254px;
  72. height: 159px;
  73. transform: scaleX(-1);
  74. left: 327.999px;
  75. top: 620.94px;
  76. "
  77. /><img
  78. src="./rocketsrchrome_files/cloud-1.png"
  79. class="cloud front"
  80. style="width: 231px; height: 117px; left: -122.168px; top: 339.537px"
  81. /><img
  82. src="./rocketsrchrome_files/cloud-2.png"
  83. class="cloud front"
  84. style="width: 66px; height: 37px; left: 505.832px; top: 166.641px"
  85. /><img
  86. src="./rocketsrchrome_files/cloud-0.png"
  87. class="cloud front"
  88. style="width: 114px; height: 71px; left: 740.832px; top: 379.316px"
  89. /><img
  90. src="./rocketsrchrome_files/cloud-0.png"
  91. class="cloud back"
  92. style="
  93. width: 96px;
  94. height: 60px;
  95. transform: scaleX(-1);
  96. left: 452.999px;
  97. top: 606.645px;
  98. "
  99. /><img
  100. src="./rocketsrchrome_files/cloud-0.png"
  101. class="cloud front"
  102. style="
  103. width: 72px;
  104. height: 45px;
  105. transform: scaleX(-1);
  106. left: 149.832px;
  107. top: 26.552px;
  108. "
  109. /><img
  110. src="./rocketsrchrome_files/cloud-0.png"
  111. class="cloud back"
  112. style="width: 84px; height: 53px; left: 939.999px; top: 156.89px"
  113. /><img
  114. src="./rocketsrchrome_files/cloud-1.png"
  115. class="cloud front"
  116. style="
  117. width: 157px;
  118. height: 79px;
  119. transform: scaleX(-1);
  120. left: 607.832px;
  121. top: 45.7999px;
  122. "
  123. /><img
  124. src="./rocketsrchrome_files/cloud-1.png"
  125. class="cloud front"
  126. style="width: 129px; height: 66px; left: 259.832px; top: 328.975px"
  127. /><img
  128. src="./rocketsrchrome_files/cloud-2.png"
  129. class="cloud front"
  130. style="
  131. width: 191px;
  132. height: 107px;
  133. transform: scaleX(-1);
  134. left: 232.832px;
  135. top: 158.592px;
  136. "
  137. /><img
  138. src="./rocketsrchrome_files/cloud-1.png"
  139. class="cloud front"
  140. style="
  141. width: 257px;
  142. height: 130px;
  143. transform: scaleX(-1);
  144. left: 464.832px;
  145. top: 722.23px;
  146. "
  147. /><img
  148. src="./rocketsrchrome_files/cloud-0.png"
  149. class="cloud front"
  150. style="
  151. width: 160px;
  152. height: 100px;
  153. transform: scaleX(-1);
  154. left: 653.832px;
  155. top: 697.267px;
  156. "
  157. /><img
  158. src="./rocketsrchrome_files/cloud-0.png"
  159. class="cloud front"
  160. style="width: 189px; height: 118px; left: -103.168px; top: 158.261px"
  161. /><img
  162. src="./rocketsrchrome_files/cloud-2.png"
  163. class="cloud back"
  164. style="
  165. width: 167px;
  166. height: 93px;
  167. transform: scaleX(-1);
  168. left: 506.999px;
  169. top: 296.27px;
  170. "
  171. /><img
  172. src="./rocketsrchrome_files/cloud-2.png"
  173. class="cloud back"
  174. style="
  175. width: 211px;
  176. height: 118px;
  177. transform: scaleX(-1);
  178. left: 580.999px;
  179. top: 625.646px;
  180. "
  181. /><img
  182. src="./rocketsrchrome_files/cloud-2.png"
  183. class="cloud back"
  184. style="
  185. width: 228px;
  186. height: 128px;
  187. transform: scaleX(-1);
  188. left: 1034px;
  189. top: 248.156px;
  190. "
  191. />
  192. </div>
  193. <div class="container">
  194. <a id="logo" href="https://rocket.rs/"><span>Dioxus Homepage</span></a>
  195. <nav class="version-select">
  196. <span onclick="toggleOptions()">v0.4 <i></i></span
  197. ><options
  198. ><a href="https://rocket.rs/v0.3/">v0.3</a>
  199. <a href="https://rocket.rs/master/">master</a></options
  200. >
  201. </nav>
  202. <input type="checkbox" id="toggle" />
  203. <label for="toggle" class="hamburger"
  204. ><span></span> <span></span> <span></span
  205. ></label>
  206. <nav class="main">
  207. <a href="https://rocket.rs/v0.4/overview">overview</a>
  208. <a href="https://rocket.rs/v0.4/guide">guide</a>
  209. <a href="https://api.rocket.rs/v0.4/rocket">api</a>
  210. <a href="https://rocket.rs/v0.4/news">news</a>
  211. <a href="https://github.com/SergioBenitez/Dioxus/tree/v0.4">code</a>
  212. </nav>
  213. <div class="centered banner">
  214. <h1>Meet Dioxus.</h1>
  215. <h2>
  216. Dioxus is a web framework for Rust that makes it simple to write
  217. <i>fast</i>, <b>secure</b> web applications without sacrificing
  218. flexibility, usability, or type safety.
  219. </h2>
  220. <a href="https://rocket.rs/v0.4/guide" class="button">Get Started</a>
  221. <a href="https://rocket.rs/v0.4/overview" class="button inverted"
  222. >Learn More</a
  223. >
  224. </div>
  225. <div class="grid">
  226. <div class="col"><hr /></div>
  227. <h4 class="col" style="text-align: center; margin: 0; padding: 0">
  228. Latest Release:
  229. <a href="https://crates.io/crates/rocket/0.4.6"
  230. >0.4.6 (Nov 09, 2020)</a
  231. >
  232. </h4>
  233. <div class="col"><hr /></div>
  234. </div>
  235. <br />
  236. <div class="grid features">
  237. <div class="col centered">
  238. <img
  239. src="./rocketsrchrome_files/helmet.svg"
  240. alt="Type Safe Icon (helmet)"
  241. />
  242. <h3>Type Safe</h3>
  243. <figcaption>
  244. From request to response Dioxus ensures that your types mean
  245. something.
  246. </figcaption>
  247. <a
  248. class="button inverted small"
  249. href="https://rocket.rs/v0.4/overview/#how-rocket-works"
  250. >Learn More</a
  251. >
  252. </div>
  253. <div class="col centered">
  254. <img
  255. src="./rocketsrchrome_files/robot-free.svg"
  256. alt="Boilerplate Free Icon (robot-free)"
  257. />
  258. <h3>Boilerplate Free</h3>
  259. <figcaption>
  260. Spend your time writing code that really matters, and let Dioxus
  261. generate the rest.
  262. </figcaption>
  263. <a
  264. class="button inverted small"
  265. href="https://rocket.rs/v0.4/overview/#anatomy-of-a-rocket-application"
  266. >See Examples</a
  267. >
  268. </div>
  269. <div class="col centered">
  270. <img
  271. src="./rocketsrchrome_files/sun.svg"
  272. alt="Easy To Use Icon (sun)"
  273. style="margin-top: 2px"
  274. />
  275. <h3>Easy To Use</h3>
  276. <figcaption>
  277. Simple, intuitive APIs make Dioxus approachable, no matter your
  278. background.
  279. </figcaption>
  280. <a class="button inverted small" href="https://rocket.rs/v0.4/guide"
  281. >Get Started</a
  282. >
  283. </div>
  284. <div class="col centered">
  285. <img
  286. src="./rocketsrchrome_files/telescope.svg"
  287. alt="Extensible Icon (telescope)"
  288. style="margin-top: 9px"
  289. />
  290. <h3>Extensible</h3>
  291. <figcaption>
  292. Create your own first-class primitives that any Dioxus application
  293. can use.
  294. </figcaption>
  295. <a
  296. class="button inverted small"
  297. href="https://rocket.rs/v0.4/overview/#anatomy-of-a-rocket-application"
  298. >See How</a
  299. >
  300. </div>
  301. </div>
  302. </div>
  303. </header>
  304. <a
  305. href="https://github.com/SergioBenitez/Dioxus/tree/v0.4"
  306. class="github-corner"
  307. aria-label="View source on Github"
  308. ><svg
  309. width="75"
  310. height="75"
  311. viewBox="0 0 250 250"
  312. style="
  313. fill: #fff;
  314. z-index: 10;
  315. color: #151513;
  316. mix-blend-mode: screen;
  317. position: absolute;
  318. top: 0;
  319. border: 0;
  320. right: 0;
  321. "
  322. aria-hidden="true"
  323. >
  324. <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
  325. <path
  326. d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7
  327. 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9
  328. 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
  329. fill="currentColor"
  330. style="transform-origin: 130px 106px"
  331. class="octo-arm"
  332. ></path>
  333. <path
  334. d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6
  335. C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0
  336. C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1
  337. C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4
  338. C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9
  339. C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5
  340. C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9
  341. L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
  342. fill="currentColor"
  343. class="octo-body"
  344. ></path>
  345. </svg> </a
  346. ><span></span>
  347. <section class="grid mobile-reverse">
  348. <div class="container">
  349. <div class="col left-main">
  350. <h3>Hello, Dioxus!</h3>
  351. <hr />
  352. <p>
  353. This is a <strong>complete Dioxus application</strong>. It does
  354. exactly what you would expect. If you were to visit
  355. <strong>http://localhost:8000/hello/John/58</strong>, you’d see:
  356. </p>
  357. <p><span class="callout">Hello, 58 year old named John!</span></p>
  358. <p>
  359. If someone visits a path with an <code>&lt;age&gt;</code> that isn’t
  360. a <code>u8</code>, Dioxus doesn’t blindly call <code>hello</code>.
  361. Instead, it tries other matching routes or returns a
  362. <strong>404</strong>.
  363. </p>
  364. </div>
  365. <div class="col right-main hl-dark">
  366. <table class="code hltable">
  367. <tbody>
  368. <tr>
  369. <td class="linenos">
  370. <div class="linenodiv">
  371. <pre>
  372. 1
  373. 2
  374. 3
  375. 4
  376. 5
  377. 6
  378. 7
  379. 8
  380. 9
  381. 10
  382. 11
  383. 12</pre
  384. >
  385. </div>
  386. </td>
  387. <td class="code">
  388. <div class="code hl">
  389. <pre><span></span><span class="cp">#![feature(proc_macro_hygiene, decl_macro)]</span><span class="w"></span>
  390. <span class="cp">#[macro_use]</span><span class="w"> </span><span class="k">extern</span><span class="w"> </span><span class="k">crate</span><span class="w"> </span><span class="n">rocket</span><span class="p">;</span><span class="w"></span>
  391. <span class="cp">#[get(</span><span class="s">"/hello/&lt;name&gt;/&lt;age&gt;"</span><span class="cp">)]</span><span class="w"></span>
  392. <span class="k">fn</span> <span class="nf">hello</span><span class="p">(</span><span class="n">name</span>: <span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">age</span>: <span class="kt">u8</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">String</span> <span class="p">{</span><span class="w"></span>
  393. <span class="w"> </span><span class="n">format</span><span class="o">!</span><span class="p">(</span><span class="s">"Hello, {} year old named {}!"</span><span class="p">,</span><span class="w"> </span><span class="n">age</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"></span>
  394. <span class="p">}</span><span class="w"></span>
  395. <span class="k">fn</span> <span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  396. <span class="w"> </span><span class="n">rocket</span>::<span class="n">ignite</span><span class="p">().</span><span class="n">mount</span><span class="p">(</span><span class="s">"/"</span><span class="p">,</span><span class="w"> </span><span class="n">routes</span><span class="o">!</span><span class="p">[</span><span class="n">hello</span><span class="p">]).</span><span class="n">launch</span><span class="p">();</span><span class="w"></span>
  397. <span class="p">}</span><span class="w"></span>
  398. </pre>
  399. </div>
  400. </td>
  401. </tr>
  402. </tbody>
  403. </table>
  404. </div>
  405. </div>
  406. </section>
  407. <section class="grid mobile-reverse">
  408. <div class="container">
  409. <div class="col left-main">
  410. <h3>Forms? Check!</h3>
  411. <hr />
  412. <p>
  413. Handling forms <strong>is simple and easy</strong>. Simply derive
  414. <code>FromForm</code> for your structure and let Dioxus know which
  415. parameter to use. Dioxus <strong>parses and validates</strong> the
  416. form request, creates the structure, and calls your function.
  417. </p>
  418. <p>
  419. Bad form request? Dioxus doesn’t call your function! What if you
  420. want to know if the form was bad? Simple! Change the type of
  421. <code>task</code> to <code>Option</code> or <code>Result</code>!
  422. </p>
  423. </div>
  424. <div class="col right-main hl-light">
  425. <table class="code hltable">
  426. <tbody>
  427. <tr>
  428. <td class="linenos">
  429. <div class="linenodiv">
  430. <pre>
  431. 1
  432. 2
  433. 3
  434. 4
  435. 5
  436. 6
  437. 7
  438. 8
  439. 9
  440. 10
  441. 11
  442. 12
  443. 13
  444. 14</pre
  445. >
  446. </div>
  447. </td>
  448. <td class="code">
  449. <div class="code hl">
  450. <pre><span></span><span class="cp">#[derive(FromForm)]</span><span class="w"></span>
  451. <span class="k">struct</span> <span class="nc">Task</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  452. <span class="w"> </span><span class="n">description</span>: <span class="nb">String</span><span class="p">,</span><span class="w"></span>
  453. <span class="w"> </span><span class="n">completed</span>: <span class="kt">bool</span>
  454. <span class="p">}</span><span class="w"></span>
  455. <span class="cp">#[post(</span><span class="s">"/"</span><span class="cp">, data = </span><span class="s">"&lt;task&gt;"</span><span class="cp">)]</span><span class="w"></span>
  456. <span class="k">fn</span> <span class="nf">new</span><span class="p">(</span><span class="n">task</span>: <span class="nc">Form</span><span class="o">&lt;</span><span class="n">Task</span><span class="o">&gt;</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">Flash</span><span class="o">&lt;</span><span class="n">Redirect</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  457. <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">task</span><span class="p">.</span><span class="n">description</span><span class="p">.</span><span class="n">is_empty</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  458. <span class="w"> </span><span class="n">Flash</span>::<span class="n">error</span><span class="p">(</span><span class="n">Redirect</span>::<span class="n">to</span><span class="p">(</span><span class="s">"/"</span><span class="p">),</span><span class="w"> </span><span class="s">"Cannot be empty."</span><span class="p">)</span><span class="w"></span>
  459. <span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  460. <span class="w"> </span><span class="n">Flash</span>::<span class="n">success</span><span class="p">(</span><span class="n">Redirect</span>::<span class="n">to</span><span class="p">(</span><span class="s">"/"</span><span class="p">),</span><span class="w"> </span><span class="s">"Task added."</span><span class="p">)</span><span class="w"></span>
  461. <span class="w"> </span><span class="p">}</span><span class="w"></span>
  462. <span class="p">}</span><span class="w"></span>
  463. </pre>
  464. </div>
  465. </td>
  466. </tr>
  467. </tbody>
  468. </table>
  469. </div>
  470. </div>
  471. </section>
  472. <section class="grid mobile-reverse">
  473. <div class="container">
  474. <div class="col left-main">
  475. <h3>JSON, out of the box.</h3>
  476. <hr />
  477. <p>
  478. Dioxus has first-class support for JSON, right out of the box.
  479. Simply derive <code>Deserialize</code> or <code>Serialize</code> to
  480. receive or return JSON, respectively.
  481. </p>
  482. <p>
  483. Like other important features, JSON works through Dioxus’s
  484. <code>FromData</code> trait, Dioxus’s approach to deriving types
  485. from body data. It works like this: specify a
  486. <code>data</code> route parameter of any type that implements
  487. <code>FromData</code>. A value of that type will then be created
  488. automatically from the incoming request body. Best of all, you can
  489. implement <code>FromData</code> for your types!
  490. </p>
  491. </div>
  492. <div class="col right-main hl-dark">
  493. <table class="code hltable">
  494. <tbody>
  495. <tr>
  496. <td class="linenos">
  497. <div class="linenodiv">
  498. <pre>
  499. 1
  500. 2
  501. 3
  502. 4
  503. 5
  504. 6
  505. 7
  506. 8
  507. 9
  508. 10
  509. 11
  510. 12
  511. 13
  512. 14</pre
  513. >
  514. </div>
  515. </td>
  516. <td class="code">
  517. <div class="code hl">
  518. <pre><span></span><span class="cp">#[derive(Serialize, Deserialize)]</span><span class="w"></span>
  519. <span class="k">struct</span> <span class="nc">Message</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  520. <span class="w"> </span><span class="n">contents</span>: <span class="nb">String</span><span class="p">,</span><span class="w"></span>
  521. <span class="p">}</span><span class="w"></span>
  522. <span class="cp">#[put(</span><span class="s">"/&lt;id&gt;"</span><span class="cp">, data = </span><span class="s">"&lt;msg&gt;"</span><span class="cp">)]</span><span class="w"></span>
  523. <span class="k">fn</span> <span class="nf">update</span><span class="p">(</span><span class="n">db</span>: <span class="kp">&amp;</span><span class="nc">Db</span><span class="p">,</span><span class="w"> </span><span class="n">id</span>: <span class="nc">Id</span><span class="p">,</span><span class="w"> </span><span class="n">msg</span>: <span class="nc">Json</span><span class="o">&lt;</span><span class="n">Message</span><span class="o">&gt;</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">JsonValue</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  524. <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">db</span><span class="p">.</span><span class="n">contains_key</span><span class="p">(</span><span class="o">&amp;</span><span class="n">id</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  525. <span class="w"> </span><span class="n">db</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">msg</span><span class="p">.</span><span class="n">contents</span><span class="p">);</span><span class="w"></span>
  526. <span class="w"> </span><span class="n">json</span><span class="o">!</span><span class="p">({</span><span class="w"> </span><span class="s">"status"</span>: <span class="s">"ok"</span><span class="w"> </span><span class="p">})</span><span class="w"></span>
  527. <span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
  528. <span class="w"> </span><span class="n">json</span><span class="o">!</span><span class="p">({</span><span class="w"> </span><span class="s">"status"</span>: <span class="s">"error"</span><span class="w"> </span><span class="p">})</span><span class="w"></span>
  529. <span class="w"> </span><span class="p">}</span><span class="w"></span>
  530. <span class="p">}</span><span class="w"></span>
  531. </pre>
  532. </div>
  533. </td>
  534. </tr>
  535. </tbody>
  536. </table>
  537. </div>
  538. </div>
  539. </section>
  540. <section class="centered">
  541. <h1>Dioxus is ready to launch.</h1>
  542. <a href="https://rocket.rs/v0.4/guide" class="button">Get Started</a>
  543. <a href="https://rocket.rs/v0.4/overview" class="button inverted"
  544. >Learn More</a
  545. >
  546. </section>
  547. <section class="features">
  548. <div class="container">
  549. <div class="centered">
  550. <h2>And so much more.</h2>
  551. <h4>Essential features, built in.</h4>
  552. </div>
  553. <div class="grid">
  554. <div class="col centered tight">
  555. <img
  556. src="./rocketsrchrome_files/templating-icon.svg"
  557. alt="Templating Icon (templating-icon)"
  558. />
  559. <h3 class="blue">Templating</h3>
  560. <figcaption class="wide">
  561. Dioxus makes templating a breeze with built-in templating support.
  562. </figcaption>
  563. <a
  564. class="button inverted small blue"
  565. href="https://rocket.rs/v0.4/guide/responses/#templates"
  566. >Learn More</a
  567. >
  568. </div>
  569. <div class="col centered tight">
  570. <img
  571. src="./rocketsrchrome_files/cookies-icon.svg"
  572. alt="Cookies Icon (cookies-icon)"
  573. style="margin-top: -6px"
  574. />
  575. <h3 class="purple">Cookies</h3>
  576. <figcaption class="wide">
  577. View, add, or remove cookies, with or without encryption, without
  578. hassle.
  579. </figcaption>
  580. <a
  581. class="button inverted small purple"
  582. href="https://rocket.rs/v0.4/guide/requests/#cookies"
  583. >Learn More</a
  584. >
  585. </div>
  586. <div class="col centered tight">
  587. <img
  588. src="./rocketsrchrome_files/streams-icon.svg"
  589. alt="Streams Icon (streams-icon)"
  590. style="margin-top: -29px"
  591. />
  592. <h3 class="red">Streams</h3>
  593. <figcaption class="wide">
  594. Dioxus streams all incoming and outgoing data, so size isn't a
  595. concern.
  596. </figcaption>
  597. <a
  598. class="button inverted small red"
  599. href="https://rocket.rs/v0.4/guide/requests/#streaming"
  600. >Learn More</a
  601. >
  602. </div>
  603. </div>
  604. <hr />
  605. <div class="grid">
  606. <div class="col centered tight">
  607. <img
  608. src="./rocketsrchrome_files/config-icon.svg"
  609. alt="Config Environments Icon (config-icon)"
  610. style="margin-top: -3px"
  611. />
  612. <h3 class="yellow">Config Environments</h3>
  613. <figcaption class="wide">
  614. Configure your application your way for development, staging, and
  615. production.
  616. </figcaption>
  617. <a
  618. class="button inverted small yellow"
  619. href="https://rocket.rs/v0.4/guide/configuration/#environment"
  620. >Learn More</a
  621. >
  622. </div>
  623. <div class="col centered tight">
  624. <img
  625. src="./rocketsrchrome_files/testing-icon.svg"
  626. alt="Testing Library Icon (testing-icon)"
  627. />
  628. <h3 class="orange">Testing Library</h3>
  629. <figcaption class="wide">
  630. Unit test your applications with ease using the built-in testing
  631. library.
  632. </figcaption>
  633. <a
  634. class="button inverted small orange"
  635. href="https://rocket.rs/v0.4/guide/testing#testing"
  636. >Learn More</a
  637. >
  638. </div>
  639. <div class="col centered tight">
  640. <img
  641. src="./rocketsrchrome_files/ship-icon.svg"
  642. alt="Typed URIs Icon (ship-icon)"
  643. style="margin-top: -20px"
  644. />
  645. <h3 class="green">Typed URIs</h3>
  646. <figcaption class="wide">
  647. Dioxus typechecks route URIs for you so you never mistype a URI
  648. again.
  649. </figcaption>
  650. <a
  651. class="button inverted small green"
  652. href="https://rocket.rs/v0.4/guide/responses/#typed-uris"
  653. >Learn More</a
  654. >
  655. </div>
  656. </div>
  657. </div>
  658. </section>
  659. <footer class="grid">
  660. <div class="container">
  661. <div class="col mobile-hide">
  662. <a href="https://sergio.bz/">© 2016-2020 Sergio Benitez</a>
  663. </div>
  664. <div class="col centered">
  665. <img
  666. src="./rocketsrchrome_files/logo-small.svg"
  667. alt="Small Dioxus Logo"
  668. />
  669. </div>
  670. <div class="col text-right mobile-hide">
  671. <a href="https://rocket.rs/#">BACK TO TOP Δ</a>
  672. </div>
  673. </div>
  674. </footer>
  675. <script>
  676. function toggleOptions() {
  677. if (!(870 <= screen.width)) {
  678. var e = document.querySelector("nav.version-select options");
  679. e.style.display = "none" === e.style.display ? "block" : "none";
  680. }
  681. }
  682. </script>
  683. <script>
  684. function make_clouds() {
  685. for (
  686. var t = [
  687. {
  688. src: "/v0.4/images/cloud-0.png",
  689. className: "cloud back",
  690. style: {
  691. width: "254px",
  692. height: "159px",
  693. left: 0.4150208376753395,
  694. top: 0.8482790827243787,
  695. transform: "scaleX(-1)",
  696. },
  697. },
  698. {
  699. src: "/v0.4/images/cloud-1.png",
  700. className: "cloud front",
  701. style: {
  702. width: "231px",
  703. height: "117px",
  704. left: 0.08151647217334701,
  705. top: 0.46384778619445943,
  706. transform: "",
  707. },
  708. },
  709. {
  710. src: "/v0.4/images/cloud-2.png",
  711. className: "cloud front",
  712. style: {
  713. width: "66px",
  714. height: "37px",
  715. left: 0.748033557779848,
  716. top: 0.22765147586875178,
  717. transform: "",
  718. },
  719. },
  720. {
  721. src: "/v0.4/images/cloud-0.png",
  722. className: "cloud front",
  723. style: {
  724. width: "114px",
  725. height: "71px",
  726. left: 0.9580076354609097,
  727. top: 0.5181917598421091,
  728. transform: "",
  729. },
  730. },
  731. {
  732. src: "/v0.4/images/cloud-0.png",
  733. className: "cloud back",
  734. style: {
  735. width: "96px",
  736. height: "60px",
  737. left: 0.526598813402908,
  738. top: 0.828749451839631,
  739. transform: "scaleX(-1)",
  740. },
  741. },
  742. {
  743. src: "/v0.4/images/cloud-0.png",
  744. className: "cloud front",
  745. style: {
  746. width: "72px",
  747. height: "45px",
  748. left: 0.43174032452284195,
  749. top: 0.03627323642266411,
  750. transform: "scaleX(-1)",
  751. },
  752. },
  753. {
  754. src: "/v0.4/images/cloud-0.png",
  755. className: "cloud back",
  756. style: {
  757. width: "84px",
  758. height: "53px",
  759. left: 0.9296373513977365,
  760. top: 0.2143312531352375,
  761. transform: "",
  762. },
  763. },
  764. {
  765. src: "/v0.4/images/cloud-1.png",
  766. className: "cloud front",
  767. style: {
  768. width: "157px",
  769. height: "79px",
  770. left: 0.8394192676334562,
  771. top: 0.06256812600484052,
  772. transform: "scaleX(-1)",
  773. },
  774. },
  775. {
  776. src: "/v0.4/images/cloud-1.png",
  777. className: "cloud front",
  778. style: {
  779. width: "129px",
  780. height: "66px",
  781. left: 0.5289903611035771,
  782. top: 0.44941927870774023,
  783. transform: "",
  784. },
  785. },
  786. {
  787. src: "/v0.4/images/cloud-2.png",
  788. className: "cloud front",
  789. style: {
  790. width: "191px",
  791. height: "107px",
  792. left: 0.5054580108916613,
  793. top: 0.21665631039514555,
  794. transform: "scaleX(-1)",
  795. },
  796. },
  797. {
  798. src: "/v0.4/images/cloud-1.png",
  799. className: "cloud front",
  800. style: {
  801. width: "257px",
  802. height: "130px",
  803. left: 0.711964549651326,
  804. top: 0.9866528842991085,
  805. transform: "scaleX(-1)",
  806. },
  807. },
  808. {
  809. src: "/v0.4/images/cloud-0.png",
  810. className: "cloud front",
  811. style: {
  812. width: "160px",
  813. height: "100px",
  814. left: 0.8804341424789892,
  815. top: 0.9525512115988461,
  816. transform: "scaleX(-1)",
  817. },
  818. },
  819. {
  820. src: "/v0.4/images/cloud-0.png",
  821. className: "cloud front",
  822. style: {
  823. width: "189px",
  824. height: "118px",
  825. left: 0.11523417887783305,
  826. top: 0.21620306890331475,
  827. transform: "",
  828. },
  829. },
  830. {
  831. src: "/v0.4/images/cloud-2.png",
  832. className: "cloud back",
  833. style: {
  834. width: "167px",
  835. height: "93px",
  836. left: 0.5745663098156899,
  837. top: 0.40474044003106946,
  838. transform: "scaleX(-1)",
  839. },
  840. },
  841. {
  842. src: "/v0.4/images/cloud-2.png",
  843. className: "cloud back",
  844. style: {
  845. width: "211px",
  846. height: "118px",
  847. left: 0.640291368531211,
  848. top: 0.854708255363859,
  849. transform: "scaleX(-1)",
  850. },
  851. },
  852. {
  853. src: "/v0.4/images/cloud-2.png",
  854. className: "cloud back",
  855. style: {
  856. width: "228px",
  857. height: "128px",
  858. left: 0.9868028690238078,
  859. top: 0.3390108865793462,
  860. transform: "scaleX(-1)",
  861. },
  862. },
  863. ],
  864. p = document.getElementsByTagName("header")[0],
  865. e = document.getElementById("clouds"),
  866. s = Math.min((p.offsetHeight / 750) * t.length, t.length),
  867. l = 0;
  868. l < s;
  869. l++
  870. ) {
  871. var a = t[l],
  872. c = document.createElement("img");
  873. Object.assign(c, a), Object.assign(c.style, a.style);
  874. var o = p.offsetWidth;
  875. c.style.left = o * a.style.left + "px";
  876. var r = p.offsetHeight;
  877. (c.style.top = r * a.style.top + "px"), e.appendChild(c);
  878. }
  879. var n = 0,
  880. i = 0,
  881. d = 14,
  882. m = 5,
  883. f = e.children;
  884. function h(t, e, s, l) {
  885. var a = ((e - s) / 1e3) * l;
  886. if (a < 1) return !1;
  887. for (var c = 0; c < f.length; c++) {
  888. var o = f[c];
  889. if (o.className.includes(t)) {
  890. var r = parseInt(o.style.left) - a,
  891. n = parseInt(o.style.width);
  892. if (r < -n) {
  893. var i = p.offsetWidth;
  894. r = i - (-(r + n) % i);
  895. }
  896. o.style.left = r + "px";
  897. }
  898. }
  899. return !0;
  900. }
  901. window.requestAnimationFrame(function t(e) {
  902. e - Math.min(i, n) < 50 ||
  903. (h("front", e, n, d) && (n = e), h("back", e, i, m) && (i = e)),
  904. window.requestAnimationFrame(t);
  905. });
  906. }
  907. make_clouds();
  908. </script>
  909. </body>
  910. </html>