├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── README.tmpl ├── data.toml └── src ├── data.rs ├── main.rs └── table.rs /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.22.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "aho-corasick" 22 | version = "1.1.3" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 | dependencies = [ 26 | "memchr", 27 | ] 28 | 29 | [[package]] 30 | name = "anstream" 31 | version = "0.6.14" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" 34 | dependencies = [ 35 | "anstyle", 36 | "anstyle-parse", 37 | "anstyle-query", 38 | "anstyle-wincon", 39 | "colorchoice", 40 | "is_terminal_polyfill", 41 | "utf8parse", 42 | ] 43 | 44 | [[package]] 45 | name = "anstyle" 46 | version = "1.0.7" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" 49 | 50 | [[package]] 51 | name = "anstyle-parse" 52 | version = "0.2.4" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" 55 | dependencies = [ 56 | "utf8parse", 57 | ] 58 | 59 | [[package]] 60 | name = "anstyle-query" 61 | version = "1.1.0" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" 64 | dependencies = [ 65 | "windows-sys 0.52.0", 66 | ] 67 | 68 | [[package]] 69 | name = "anstyle-wincon" 70 | version = "3.0.3" 71 | source = "registry+https://github.com/rust-lang/crates.io-index" 72 | checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" 73 | dependencies = [ 74 | "anstyle", 75 | "windows-sys 0.52.0", 76 | ] 77 | 78 | [[package]] 79 | name = "anyhow" 80 | version = "1.0.86" 81 | source = "registry+https://github.com/rust-lang/crates.io-index" 82 | checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" 83 | 84 | [[package]] 85 | name = "autocfg" 86 | version = "1.3.0" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 89 | 90 | [[package]] 91 | name = "backtrace" 92 | version = "0.3.72" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" 95 | dependencies = [ 96 | "addr2line", 97 | "cc", 98 | "cfg-if", 99 | "libc", 100 | "miniz_oxide", 101 | "object", 102 | "rustc-demangle", 103 | ] 104 | 105 | [[package]] 106 | name = "base64" 107 | version = "0.22.1" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 110 | 111 | [[package]] 112 | name = "bitflags" 113 | version = "2.5.0" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 116 | 117 | [[package]] 118 | name = "block-buffer" 119 | version = "0.10.4" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 122 | dependencies = [ 123 | "generic-array", 124 | ] 125 | 126 | [[package]] 127 | name = "bstr" 128 | version = "1.9.1" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" 131 | dependencies = [ 132 | "memchr", 133 | "serde", 134 | ] 135 | 136 | [[package]] 137 | name = "bumpalo" 138 | version = "3.16.0" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 141 | 142 | [[package]] 143 | name = "bytes" 144 | version = "1.6.0" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" 147 | 148 | [[package]] 149 | name = "cc" 150 | version = "1.0.99" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" 153 | 154 | [[package]] 155 | name = "cfg-if" 156 | version = "1.0.0" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 159 | 160 | [[package]] 161 | name = "chrono" 162 | version = "0.4.38" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 165 | dependencies = [ 166 | "num-traits", 167 | "serde", 168 | ] 169 | 170 | [[package]] 171 | name = "colorchoice" 172 | version = "1.0.1" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" 175 | 176 | [[package]] 177 | name = "cpufeatures" 178 | version = "0.2.12" 179 | source = "registry+https://github.com/rust-lang/crates.io-index" 180 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 181 | dependencies = [ 182 | "libc", 183 | ] 184 | 185 | [[package]] 186 | name = "crates_io_api" 187 | version = "0.11.0" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "200ad30d24892baf2168f2df366939264d02f2fa0be0914f8e2da4bd3407c58c" 190 | dependencies = [ 191 | "chrono", 192 | "futures", 193 | "reqwest", 194 | "serde", 195 | "serde_derive", 196 | "serde_json", 197 | "serde_path_to_error", 198 | "tokio", 199 | "url", 200 | ] 201 | 202 | [[package]] 203 | name = "crossbeam-deque" 204 | version = "0.8.5" 205 | source = "registry+https://github.com/rust-lang/crates.io-index" 206 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 207 | dependencies = [ 208 | "crossbeam-epoch", 209 | "crossbeam-utils", 210 | ] 211 | 212 | [[package]] 213 | name = "crossbeam-epoch" 214 | version = "0.9.18" 215 | source = "registry+https://github.com/rust-lang/crates.io-index" 216 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 217 | dependencies = [ 218 | "crossbeam-utils", 219 | ] 220 | 221 | [[package]] 222 | name = "crossbeam-utils" 223 | version = "0.8.20" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 226 | 227 | [[package]] 228 | name = "crypto-common" 229 | version = "0.1.6" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 232 | dependencies = [ 233 | "generic-array", 234 | "typenum", 235 | ] 236 | 237 | [[package]] 238 | name = "digest" 239 | version = "0.10.7" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 242 | dependencies = [ 243 | "block-buffer", 244 | "crypto-common", 245 | ] 246 | 247 | [[package]] 248 | name = "env_filter" 249 | version = "0.1.0" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" 252 | dependencies = [ 253 | "log", 254 | "regex", 255 | ] 256 | 257 | [[package]] 258 | name = "env_logger" 259 | version = "0.11.3" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" 262 | dependencies = [ 263 | "anstream", 264 | "anstyle", 265 | "env_filter", 266 | "humantime", 267 | "log", 268 | ] 269 | 270 | [[package]] 271 | name = "equivalent" 272 | version = "1.0.1" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 275 | 276 | [[package]] 277 | name = "fnv" 278 | version = "1.0.7" 279 | source = "registry+https://github.com/rust-lang/crates.io-index" 280 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 281 | 282 | [[package]] 283 | name = "form_urlencoded" 284 | version = "1.2.1" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 287 | dependencies = [ 288 | "percent-encoding", 289 | ] 290 | 291 | [[package]] 292 | name = "futures" 293 | version = "0.3.30" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 296 | dependencies = [ 297 | "futures-channel", 298 | "futures-core", 299 | "futures-executor", 300 | "futures-io", 301 | "futures-sink", 302 | "futures-task", 303 | "futures-util", 304 | ] 305 | 306 | [[package]] 307 | name = "futures-channel" 308 | version = "0.3.30" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 311 | dependencies = [ 312 | "futures-core", 313 | "futures-sink", 314 | ] 315 | 316 | [[package]] 317 | name = "futures-core" 318 | version = "0.3.30" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 321 | 322 | [[package]] 323 | name = "futures-executor" 324 | version = "0.3.30" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 327 | dependencies = [ 328 | "futures-core", 329 | "futures-task", 330 | "futures-util", 331 | ] 332 | 333 | [[package]] 334 | name = "futures-io" 335 | version = "0.3.30" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 338 | 339 | [[package]] 340 | name = "futures-macro" 341 | version = "0.3.30" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 344 | dependencies = [ 345 | "proc-macro2", 346 | "quote", 347 | "syn", 348 | ] 349 | 350 | [[package]] 351 | name = "futures-sink" 352 | version = "0.3.30" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 355 | 356 | [[package]] 357 | name = "futures-task" 358 | version = "0.3.30" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 361 | 362 | [[package]] 363 | name = "futures-util" 364 | version = "0.3.30" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 367 | dependencies = [ 368 | "futures-channel", 369 | "futures-core", 370 | "futures-io", 371 | "futures-macro", 372 | "futures-sink", 373 | "futures-task", 374 | "memchr", 375 | "pin-project-lite", 376 | "pin-utils", 377 | "slab", 378 | ] 379 | 380 | [[package]] 381 | name = "generic-array" 382 | version = "0.14.7" 383 | source = "registry+https://github.com/rust-lang/crates.io-index" 384 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 385 | dependencies = [ 386 | "typenum", 387 | "version_check", 388 | ] 389 | 390 | [[package]] 391 | name = "getrandom" 392 | version = "0.2.15" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 395 | dependencies = [ 396 | "cfg-if", 397 | "libc", 398 | "wasi", 399 | ] 400 | 401 | [[package]] 402 | name = "gimli" 403 | version = "0.29.0" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" 406 | 407 | [[package]] 408 | name = "globset" 409 | version = "0.4.14" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" 412 | dependencies = [ 413 | "aho-corasick", 414 | "bstr", 415 | "log", 416 | "regex-automata", 417 | "regex-syntax", 418 | ] 419 | 420 | [[package]] 421 | name = "globwalk" 422 | version = "0.9.1" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" 425 | dependencies = [ 426 | "bitflags", 427 | "ignore", 428 | "walkdir", 429 | ] 430 | 431 | [[package]] 432 | name = "hashbrown" 433 | version = "0.14.5" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 436 | 437 | [[package]] 438 | name = "hermit-abi" 439 | version = "0.3.9" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 442 | 443 | [[package]] 444 | name = "http" 445 | version = "1.1.0" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 448 | dependencies = [ 449 | "bytes", 450 | "fnv", 451 | "itoa", 452 | ] 453 | 454 | [[package]] 455 | name = "http-body" 456 | version = "1.0.0" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" 459 | dependencies = [ 460 | "bytes", 461 | "http", 462 | ] 463 | 464 | [[package]] 465 | name = "http-body-util" 466 | version = "0.1.1" 467 | source = "registry+https://github.com/rust-lang/crates.io-index" 468 | checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" 469 | dependencies = [ 470 | "bytes", 471 | "futures-core", 472 | "http", 473 | "http-body", 474 | "pin-project-lite", 475 | ] 476 | 477 | [[package]] 478 | name = "httparse" 479 | version = "1.8.0" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 482 | 483 | [[package]] 484 | name = "humantime" 485 | version = "2.1.0" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 488 | 489 | [[package]] 490 | name = "hyper" 491 | version = "1.3.1" 492 | source = "registry+https://github.com/rust-lang/crates.io-index" 493 | checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" 494 | dependencies = [ 495 | "bytes", 496 | "futures-channel", 497 | "futures-util", 498 | "http", 499 | "http-body", 500 | "httparse", 501 | "itoa", 502 | "pin-project-lite", 503 | "smallvec", 504 | "tokio", 505 | "want", 506 | ] 507 | 508 | [[package]] 509 | name = "hyper-rustls" 510 | version = "0.26.0" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" 513 | dependencies = [ 514 | "futures-util", 515 | "http", 516 | "hyper", 517 | "hyper-util", 518 | "rustls", 519 | "rustls-pki-types", 520 | "tokio", 521 | "tokio-rustls", 522 | "tower-service", 523 | ] 524 | 525 | [[package]] 526 | name = "hyper-util" 527 | version = "0.1.5" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" 530 | dependencies = [ 531 | "bytes", 532 | "futures-channel", 533 | "futures-util", 534 | "http", 535 | "http-body", 536 | "hyper", 537 | "pin-project-lite", 538 | "socket2", 539 | "tokio", 540 | "tower", 541 | "tower-service", 542 | "tracing", 543 | ] 544 | 545 | [[package]] 546 | name = "idna" 547 | version = "0.5.0" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 550 | dependencies = [ 551 | "unicode-bidi", 552 | "unicode-normalization", 553 | ] 554 | 555 | [[package]] 556 | name = "ignore" 557 | version = "0.4.22" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" 560 | dependencies = [ 561 | "crossbeam-deque", 562 | "globset", 563 | "log", 564 | "memchr", 565 | "regex-automata", 566 | "same-file", 567 | "walkdir", 568 | "winapi-util", 569 | ] 570 | 571 | [[package]] 572 | name = "indexmap" 573 | version = "2.2.6" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" 576 | dependencies = [ 577 | "equivalent", 578 | "hashbrown", 579 | ] 580 | 581 | [[package]] 582 | name = "ipnet" 583 | version = "2.9.0" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 586 | 587 | [[package]] 588 | name = "is_terminal_polyfill" 589 | version = "1.70.0" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" 592 | 593 | [[package]] 594 | name = "itoa" 595 | version = "1.0.11" 596 | source = "registry+https://github.com/rust-lang/crates.io-index" 597 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 598 | 599 | [[package]] 600 | name = "js-sys" 601 | version = "0.3.69" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 604 | dependencies = [ 605 | "wasm-bindgen", 606 | ] 607 | 608 | [[package]] 609 | name = "lazy_static" 610 | version = "1.4.0" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 613 | 614 | [[package]] 615 | name = "libc" 616 | version = "0.2.155" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 619 | 620 | [[package]] 621 | name = "log" 622 | version = "0.4.21" 623 | source = "registry+https://github.com/rust-lang/crates.io-index" 624 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 625 | 626 | [[package]] 627 | name = "memchr" 628 | version = "2.7.2" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" 631 | 632 | [[package]] 633 | name = "mime" 634 | version = "0.3.17" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 637 | 638 | [[package]] 639 | name = "miniz_oxide" 640 | version = "0.7.3" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" 643 | dependencies = [ 644 | "adler", 645 | ] 646 | 647 | [[package]] 648 | name = "mio" 649 | version = "0.8.11" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 652 | dependencies = [ 653 | "libc", 654 | "wasi", 655 | "windows-sys 0.48.0", 656 | ] 657 | 658 | [[package]] 659 | name = "num-traits" 660 | version = "0.2.19" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 663 | dependencies = [ 664 | "autocfg", 665 | ] 666 | 667 | [[package]] 668 | name = "num_cpus" 669 | version = "1.16.0" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 672 | dependencies = [ 673 | "hermit-abi", 674 | "libc", 675 | ] 676 | 677 | [[package]] 678 | name = "object" 679 | version = "0.35.0" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" 682 | dependencies = [ 683 | "memchr", 684 | ] 685 | 686 | [[package]] 687 | name = "once_cell" 688 | version = "1.19.0" 689 | source = "registry+https://github.com/rust-lang/crates.io-index" 690 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 691 | 692 | [[package]] 693 | name = "pad" 694 | version = "0.1.6" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3" 697 | dependencies = [ 698 | "unicode-width", 699 | ] 700 | 701 | [[package]] 702 | name = "percent-encoding" 703 | version = "2.3.1" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 706 | 707 | [[package]] 708 | name = "pest" 709 | version = "2.7.10" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" 712 | dependencies = [ 713 | "memchr", 714 | "thiserror", 715 | "ucd-trie", 716 | ] 717 | 718 | [[package]] 719 | name = "pest_derive" 720 | version = "2.7.10" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" 723 | dependencies = [ 724 | "pest", 725 | "pest_generator", 726 | ] 727 | 728 | [[package]] 729 | name = "pest_generator" 730 | version = "2.7.10" 731 | source = "registry+https://github.com/rust-lang/crates.io-index" 732 | checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" 733 | dependencies = [ 734 | "pest", 735 | "pest_meta", 736 | "proc-macro2", 737 | "quote", 738 | "syn", 739 | ] 740 | 741 | [[package]] 742 | name = "pest_meta" 743 | version = "2.7.10" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" 746 | dependencies = [ 747 | "once_cell", 748 | "pest", 749 | "sha2", 750 | ] 751 | 752 | [[package]] 753 | name = "pin-project" 754 | version = "1.1.5" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 757 | dependencies = [ 758 | "pin-project-internal", 759 | ] 760 | 761 | [[package]] 762 | name = "pin-project-internal" 763 | version = "1.1.5" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 766 | dependencies = [ 767 | "proc-macro2", 768 | "quote", 769 | "syn", 770 | ] 771 | 772 | [[package]] 773 | name = "pin-project-lite" 774 | version = "0.2.14" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 777 | 778 | [[package]] 779 | name = "pin-utils" 780 | version = "0.1.0" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 783 | 784 | [[package]] 785 | name = "proc-macro2" 786 | version = "1.0.85" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" 789 | dependencies = [ 790 | "unicode-ident", 791 | ] 792 | 793 | [[package]] 794 | name = "quote" 795 | version = "1.0.36" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 798 | dependencies = [ 799 | "proc-macro2", 800 | ] 801 | 802 | [[package]] 803 | name = "regex" 804 | version = "1.10.5" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" 807 | dependencies = [ 808 | "aho-corasick", 809 | "memchr", 810 | "regex-automata", 811 | "regex-syntax", 812 | ] 813 | 814 | [[package]] 815 | name = "regex-automata" 816 | version = "0.4.7" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" 819 | dependencies = [ 820 | "aho-corasick", 821 | "memchr", 822 | "regex-syntax", 823 | ] 824 | 825 | [[package]] 826 | name = "regex-syntax" 827 | version = "0.8.4" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" 830 | 831 | [[package]] 832 | name = "reqwest" 833 | version = "0.12.4" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" 836 | dependencies = [ 837 | "base64", 838 | "bytes", 839 | "futures-channel", 840 | "futures-core", 841 | "futures-util", 842 | "http", 843 | "http-body", 844 | "http-body-util", 845 | "hyper", 846 | "hyper-rustls", 847 | "hyper-util", 848 | "ipnet", 849 | "js-sys", 850 | "log", 851 | "mime", 852 | "once_cell", 853 | "percent-encoding", 854 | "pin-project-lite", 855 | "rustls", 856 | "rustls-pemfile", 857 | "rustls-pki-types", 858 | "serde", 859 | "serde_json", 860 | "serde_urlencoded", 861 | "sync_wrapper", 862 | "tokio", 863 | "tokio-rustls", 864 | "tower-service", 865 | "url", 866 | "wasm-bindgen", 867 | "wasm-bindgen-futures", 868 | "web-sys", 869 | "webpki-roots", 870 | "winreg", 871 | ] 872 | 873 | [[package]] 874 | name = "ring" 875 | version = "0.17.8" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 878 | dependencies = [ 879 | "cc", 880 | "cfg-if", 881 | "getrandom", 882 | "libc", 883 | "spin", 884 | "untrusted", 885 | "windows-sys 0.52.0", 886 | ] 887 | 888 | [[package]] 889 | name = "rust-web-framework-comparison" 890 | version = "0.0.0" 891 | dependencies = [ 892 | "anyhow", 893 | "crates_io_api", 894 | "env_logger", 895 | "log", 896 | "pad", 897 | "reqwest", 898 | "serde", 899 | "tera", 900 | "toml", 901 | "url", 902 | ] 903 | 904 | [[package]] 905 | name = "rustc-demangle" 906 | version = "0.1.24" 907 | source = "registry+https://github.com/rust-lang/crates.io-index" 908 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 909 | 910 | [[package]] 911 | name = "rustls" 912 | version = "0.22.4" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" 915 | dependencies = [ 916 | "log", 917 | "ring", 918 | "rustls-pki-types", 919 | "rustls-webpki", 920 | "subtle", 921 | "zeroize", 922 | ] 923 | 924 | [[package]] 925 | name = "rustls-pemfile" 926 | version = "2.1.2" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" 929 | dependencies = [ 930 | "base64", 931 | "rustls-pki-types", 932 | ] 933 | 934 | [[package]] 935 | name = "rustls-pki-types" 936 | version = "1.7.0" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" 939 | 940 | [[package]] 941 | name = "rustls-webpki" 942 | version = "0.102.4" 943 | source = "registry+https://github.com/rust-lang/crates.io-index" 944 | checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" 945 | dependencies = [ 946 | "ring", 947 | "rustls-pki-types", 948 | "untrusted", 949 | ] 950 | 951 | [[package]] 952 | name = "ryu" 953 | version = "1.0.18" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 956 | 957 | [[package]] 958 | name = "same-file" 959 | version = "1.0.6" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 962 | dependencies = [ 963 | "winapi-util", 964 | ] 965 | 966 | [[package]] 967 | name = "serde" 968 | version = "1.0.203" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" 971 | dependencies = [ 972 | "serde_derive", 973 | ] 974 | 975 | [[package]] 976 | name = "serde_derive" 977 | version = "1.0.203" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" 980 | dependencies = [ 981 | "proc-macro2", 982 | "quote", 983 | "syn", 984 | ] 985 | 986 | [[package]] 987 | name = "serde_json" 988 | version = "1.0.117" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" 991 | dependencies = [ 992 | "itoa", 993 | "ryu", 994 | "serde", 995 | ] 996 | 997 | [[package]] 998 | name = "serde_path_to_error" 999 | version = "0.1.16" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" 1002 | dependencies = [ 1003 | "itoa", 1004 | "serde", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "serde_spanned" 1009 | version = "0.6.6" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" 1012 | dependencies = [ 1013 | "serde", 1014 | ] 1015 | 1016 | [[package]] 1017 | name = "serde_urlencoded" 1018 | version = "0.7.1" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1021 | dependencies = [ 1022 | "form_urlencoded", 1023 | "itoa", 1024 | "ryu", 1025 | "serde", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "sha2" 1030 | version = "0.10.8" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1033 | dependencies = [ 1034 | "cfg-if", 1035 | "cpufeatures", 1036 | "digest", 1037 | ] 1038 | 1039 | [[package]] 1040 | name = "slab" 1041 | version = "0.4.9" 1042 | source = "registry+https://github.com/rust-lang/crates.io-index" 1043 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1044 | dependencies = [ 1045 | "autocfg", 1046 | ] 1047 | 1048 | [[package]] 1049 | name = "smallvec" 1050 | version = "1.13.2" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1053 | 1054 | [[package]] 1055 | name = "socket2" 1056 | version = "0.5.7" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 1059 | dependencies = [ 1060 | "libc", 1061 | "windows-sys 0.52.0", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "spin" 1066 | version = "0.9.8" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1069 | 1070 | [[package]] 1071 | name = "subtle" 1072 | version = "2.5.0" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 1075 | 1076 | [[package]] 1077 | name = "syn" 1078 | version = "2.0.66" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" 1081 | dependencies = [ 1082 | "proc-macro2", 1083 | "quote", 1084 | "unicode-ident", 1085 | ] 1086 | 1087 | [[package]] 1088 | name = "sync_wrapper" 1089 | version = "0.1.2" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 1092 | 1093 | [[package]] 1094 | name = "tera" 1095 | version = "1.20.0" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" 1098 | dependencies = [ 1099 | "globwalk", 1100 | "lazy_static", 1101 | "pest", 1102 | "pest_derive", 1103 | "regex", 1104 | "serde", 1105 | "serde_json", 1106 | "unic-segment", 1107 | ] 1108 | 1109 | [[package]] 1110 | name = "thiserror" 1111 | version = "1.0.61" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" 1114 | dependencies = [ 1115 | "thiserror-impl", 1116 | ] 1117 | 1118 | [[package]] 1119 | name = "thiserror-impl" 1120 | version = "1.0.61" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" 1123 | dependencies = [ 1124 | "proc-macro2", 1125 | "quote", 1126 | "syn", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "tinyvec" 1131 | version = "1.6.0" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1134 | dependencies = [ 1135 | "tinyvec_macros", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "tinyvec_macros" 1140 | version = "0.1.1" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1143 | 1144 | [[package]] 1145 | name = "tokio" 1146 | version = "1.38.0" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" 1149 | dependencies = [ 1150 | "backtrace", 1151 | "bytes", 1152 | "libc", 1153 | "mio", 1154 | "num_cpus", 1155 | "pin-project-lite", 1156 | "socket2", 1157 | "windows-sys 0.48.0", 1158 | ] 1159 | 1160 | [[package]] 1161 | name = "tokio-rustls" 1162 | version = "0.25.0" 1163 | source = "registry+https://github.com/rust-lang/crates.io-index" 1164 | checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" 1165 | dependencies = [ 1166 | "rustls", 1167 | "rustls-pki-types", 1168 | "tokio", 1169 | ] 1170 | 1171 | [[package]] 1172 | name = "toml" 1173 | version = "0.8.14" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" 1176 | dependencies = [ 1177 | "serde", 1178 | "serde_spanned", 1179 | "toml_datetime", 1180 | "toml_edit", 1181 | ] 1182 | 1183 | [[package]] 1184 | name = "toml_datetime" 1185 | version = "0.6.6" 1186 | source = "registry+https://github.com/rust-lang/crates.io-index" 1187 | checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" 1188 | dependencies = [ 1189 | "serde", 1190 | ] 1191 | 1192 | [[package]] 1193 | name = "toml_edit" 1194 | version = "0.22.14" 1195 | source = "registry+https://github.com/rust-lang/crates.io-index" 1196 | checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" 1197 | dependencies = [ 1198 | "indexmap", 1199 | "serde", 1200 | "serde_spanned", 1201 | "toml_datetime", 1202 | "winnow", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "tower" 1207 | version = "0.4.13" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 1210 | dependencies = [ 1211 | "futures-core", 1212 | "futures-util", 1213 | "pin-project", 1214 | "pin-project-lite", 1215 | "tokio", 1216 | "tower-layer", 1217 | "tower-service", 1218 | ] 1219 | 1220 | [[package]] 1221 | name = "tower-layer" 1222 | version = "0.3.2" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 1225 | 1226 | [[package]] 1227 | name = "tower-service" 1228 | version = "0.3.2" 1229 | source = "registry+https://github.com/rust-lang/crates.io-index" 1230 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 1231 | 1232 | [[package]] 1233 | name = "tracing" 1234 | version = "0.1.40" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1237 | dependencies = [ 1238 | "pin-project-lite", 1239 | "tracing-core", 1240 | ] 1241 | 1242 | [[package]] 1243 | name = "tracing-core" 1244 | version = "0.1.32" 1245 | source = "registry+https://github.com/rust-lang/crates.io-index" 1246 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1247 | dependencies = [ 1248 | "once_cell", 1249 | ] 1250 | 1251 | [[package]] 1252 | name = "try-lock" 1253 | version = "0.2.5" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1256 | 1257 | [[package]] 1258 | name = "typenum" 1259 | version = "1.17.0" 1260 | source = "registry+https://github.com/rust-lang/crates.io-index" 1261 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 1262 | 1263 | [[package]] 1264 | name = "ucd-trie" 1265 | version = "0.1.6" 1266 | source = "registry+https://github.com/rust-lang/crates.io-index" 1267 | checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" 1268 | 1269 | [[package]] 1270 | name = "unic-char-property" 1271 | version = "0.9.0" 1272 | source = "registry+https://github.com/rust-lang/crates.io-index" 1273 | checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" 1274 | dependencies = [ 1275 | "unic-char-range", 1276 | ] 1277 | 1278 | [[package]] 1279 | name = "unic-char-range" 1280 | version = "0.9.0" 1281 | source = "registry+https://github.com/rust-lang/crates.io-index" 1282 | checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" 1283 | 1284 | [[package]] 1285 | name = "unic-common" 1286 | version = "0.9.0" 1287 | source = "registry+https://github.com/rust-lang/crates.io-index" 1288 | checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" 1289 | 1290 | [[package]] 1291 | name = "unic-segment" 1292 | version = "0.9.0" 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" 1294 | checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" 1295 | dependencies = [ 1296 | "unic-ucd-segment", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "unic-ucd-segment" 1301 | version = "0.9.0" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" 1304 | dependencies = [ 1305 | "unic-char-property", 1306 | "unic-char-range", 1307 | "unic-ucd-version", 1308 | ] 1309 | 1310 | [[package]] 1311 | name = "unic-ucd-version" 1312 | version = "0.9.0" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" 1315 | dependencies = [ 1316 | "unic-common", 1317 | ] 1318 | 1319 | [[package]] 1320 | name = "unicode-bidi" 1321 | version = "0.3.15" 1322 | source = "registry+https://github.com/rust-lang/crates.io-index" 1323 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 1324 | 1325 | [[package]] 1326 | name = "unicode-ident" 1327 | version = "1.0.12" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1330 | 1331 | [[package]] 1332 | name = "unicode-normalization" 1333 | version = "0.1.23" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 1336 | dependencies = [ 1337 | "tinyvec", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "unicode-width" 1342 | version = "0.1.13" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" 1345 | 1346 | [[package]] 1347 | name = "untrusted" 1348 | version = "0.9.0" 1349 | source = "registry+https://github.com/rust-lang/crates.io-index" 1350 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 1351 | 1352 | [[package]] 1353 | name = "url" 1354 | version = "2.5.0" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 1357 | dependencies = [ 1358 | "form_urlencoded", 1359 | "idna", 1360 | "percent-encoding", 1361 | "serde", 1362 | ] 1363 | 1364 | [[package]] 1365 | name = "utf8parse" 1366 | version = "0.2.2" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1369 | 1370 | [[package]] 1371 | name = "version_check" 1372 | version = "0.9.4" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1375 | 1376 | [[package]] 1377 | name = "walkdir" 1378 | version = "2.5.0" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 1381 | dependencies = [ 1382 | "same-file", 1383 | "winapi-util", 1384 | ] 1385 | 1386 | [[package]] 1387 | name = "want" 1388 | version = "0.3.1" 1389 | source = "registry+https://github.com/rust-lang/crates.io-index" 1390 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1391 | dependencies = [ 1392 | "try-lock", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "wasi" 1397 | version = "0.11.0+wasi-snapshot-preview1" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1400 | 1401 | [[package]] 1402 | name = "wasm-bindgen" 1403 | version = "0.2.92" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 1406 | dependencies = [ 1407 | "cfg-if", 1408 | "wasm-bindgen-macro", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "wasm-bindgen-backend" 1413 | version = "0.2.92" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 1416 | dependencies = [ 1417 | "bumpalo", 1418 | "log", 1419 | "once_cell", 1420 | "proc-macro2", 1421 | "quote", 1422 | "syn", 1423 | "wasm-bindgen-shared", 1424 | ] 1425 | 1426 | [[package]] 1427 | name = "wasm-bindgen-futures" 1428 | version = "0.4.42" 1429 | source = "registry+https://github.com/rust-lang/crates.io-index" 1430 | checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" 1431 | dependencies = [ 1432 | "cfg-if", 1433 | "js-sys", 1434 | "wasm-bindgen", 1435 | "web-sys", 1436 | ] 1437 | 1438 | [[package]] 1439 | name = "wasm-bindgen-macro" 1440 | version = "0.2.92" 1441 | source = "registry+https://github.com/rust-lang/crates.io-index" 1442 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 1443 | dependencies = [ 1444 | "quote", 1445 | "wasm-bindgen-macro-support", 1446 | ] 1447 | 1448 | [[package]] 1449 | name = "wasm-bindgen-macro-support" 1450 | version = "0.2.92" 1451 | source = "registry+https://github.com/rust-lang/crates.io-index" 1452 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 1453 | dependencies = [ 1454 | "proc-macro2", 1455 | "quote", 1456 | "syn", 1457 | "wasm-bindgen-backend", 1458 | "wasm-bindgen-shared", 1459 | ] 1460 | 1461 | [[package]] 1462 | name = "wasm-bindgen-shared" 1463 | version = "0.2.92" 1464 | source = "registry+https://github.com/rust-lang/crates.io-index" 1465 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 1466 | 1467 | [[package]] 1468 | name = "web-sys" 1469 | version = "0.3.69" 1470 | source = "registry+https://github.com/rust-lang/crates.io-index" 1471 | checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 1472 | dependencies = [ 1473 | "js-sys", 1474 | "wasm-bindgen", 1475 | ] 1476 | 1477 | [[package]] 1478 | name = "webpki-roots" 1479 | version = "0.26.2" 1480 | source = "registry+https://github.com/rust-lang/crates.io-index" 1481 | checksum = "3c452ad30530b54a4d8e71952716a212b08efd0f3562baa66c29a618b07da7c3" 1482 | dependencies = [ 1483 | "rustls-pki-types", 1484 | ] 1485 | 1486 | [[package]] 1487 | name = "winapi-util" 1488 | version = "0.1.8" 1489 | source = "registry+https://github.com/rust-lang/crates.io-index" 1490 | checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" 1491 | dependencies = [ 1492 | "windows-sys 0.52.0", 1493 | ] 1494 | 1495 | [[package]] 1496 | name = "windows-sys" 1497 | version = "0.48.0" 1498 | source = "registry+https://github.com/rust-lang/crates.io-index" 1499 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1500 | dependencies = [ 1501 | "windows-targets 0.48.5", 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "windows-sys" 1506 | version = "0.52.0" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1509 | dependencies = [ 1510 | "windows-targets 0.52.5", 1511 | ] 1512 | 1513 | [[package]] 1514 | name = "windows-targets" 1515 | version = "0.48.5" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1518 | dependencies = [ 1519 | "windows_aarch64_gnullvm 0.48.5", 1520 | "windows_aarch64_msvc 0.48.5", 1521 | "windows_i686_gnu 0.48.5", 1522 | "windows_i686_msvc 0.48.5", 1523 | "windows_x86_64_gnu 0.48.5", 1524 | "windows_x86_64_gnullvm 0.48.5", 1525 | "windows_x86_64_msvc 0.48.5", 1526 | ] 1527 | 1528 | [[package]] 1529 | name = "windows-targets" 1530 | version = "0.52.5" 1531 | source = "registry+https://github.com/rust-lang/crates.io-index" 1532 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" 1533 | dependencies = [ 1534 | "windows_aarch64_gnullvm 0.52.5", 1535 | "windows_aarch64_msvc 0.52.5", 1536 | "windows_i686_gnu 0.52.5", 1537 | "windows_i686_gnullvm", 1538 | "windows_i686_msvc 0.52.5", 1539 | "windows_x86_64_gnu 0.52.5", 1540 | "windows_x86_64_gnullvm 0.52.5", 1541 | "windows_x86_64_msvc 0.52.5", 1542 | ] 1543 | 1544 | [[package]] 1545 | name = "windows_aarch64_gnullvm" 1546 | version = "0.48.5" 1547 | source = "registry+https://github.com/rust-lang/crates.io-index" 1548 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1549 | 1550 | [[package]] 1551 | name = "windows_aarch64_gnullvm" 1552 | version = "0.52.5" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" 1555 | 1556 | [[package]] 1557 | name = "windows_aarch64_msvc" 1558 | version = "0.48.5" 1559 | source = "registry+https://github.com/rust-lang/crates.io-index" 1560 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1561 | 1562 | [[package]] 1563 | name = "windows_aarch64_msvc" 1564 | version = "0.52.5" 1565 | source = "registry+https://github.com/rust-lang/crates.io-index" 1566 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" 1567 | 1568 | [[package]] 1569 | name = "windows_i686_gnu" 1570 | version = "0.48.5" 1571 | source = "registry+https://github.com/rust-lang/crates.io-index" 1572 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1573 | 1574 | [[package]] 1575 | name = "windows_i686_gnu" 1576 | version = "0.52.5" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" 1579 | 1580 | [[package]] 1581 | name = "windows_i686_gnullvm" 1582 | version = "0.52.5" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" 1585 | 1586 | [[package]] 1587 | name = "windows_i686_msvc" 1588 | version = "0.48.5" 1589 | source = "registry+https://github.com/rust-lang/crates.io-index" 1590 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1591 | 1592 | [[package]] 1593 | name = "windows_i686_msvc" 1594 | version = "0.52.5" 1595 | source = "registry+https://github.com/rust-lang/crates.io-index" 1596 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" 1597 | 1598 | [[package]] 1599 | name = "windows_x86_64_gnu" 1600 | version = "0.48.5" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1603 | 1604 | [[package]] 1605 | name = "windows_x86_64_gnu" 1606 | version = "0.52.5" 1607 | source = "registry+https://github.com/rust-lang/crates.io-index" 1608 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" 1609 | 1610 | [[package]] 1611 | name = "windows_x86_64_gnullvm" 1612 | version = "0.48.5" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1615 | 1616 | [[package]] 1617 | name = "windows_x86_64_gnullvm" 1618 | version = "0.52.5" 1619 | source = "registry+https://github.com/rust-lang/crates.io-index" 1620 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" 1621 | 1622 | [[package]] 1623 | name = "windows_x86_64_msvc" 1624 | version = "0.48.5" 1625 | source = "registry+https://github.com/rust-lang/crates.io-index" 1626 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1627 | 1628 | [[package]] 1629 | name = "windows_x86_64_msvc" 1630 | version = "0.52.5" 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" 1632 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" 1633 | 1634 | [[package]] 1635 | name = "winnow" 1636 | version = "0.6.13" 1637 | source = "registry+https://github.com/rust-lang/crates.io-index" 1638 | checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" 1639 | dependencies = [ 1640 | "memchr", 1641 | ] 1642 | 1643 | [[package]] 1644 | name = "winreg" 1645 | version = "0.52.0" 1646 | source = "registry+https://github.com/rust-lang/crates.io-index" 1647 | checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" 1648 | dependencies = [ 1649 | "cfg-if", 1650 | "windows-sys 0.48.0", 1651 | ] 1652 | 1653 | [[package]] 1654 | name = "zeroize" 1655 | version = "1.8.1" 1656 | source = "registry+https://github.com/rust-lang/crates.io-index" 1657 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 1658 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rust-web-framework-comparison" 3 | authors = ["Markus Kohlhase"] 4 | version = "0.0.0" 5 | edition = "2021" 6 | publish = false 7 | 8 | [dependencies] 9 | anyhow = "1" 10 | env_logger = "0.11" 11 | log = "0.4" 12 | pad = "0.1" 13 | serde = { version = "1", features = ["derive"] } 14 | tera = { version = "1", default-features = false } 15 | toml = "0.8" 16 | url = { version = "2", features = ["serde"] } 17 | 18 | [dependencies.reqwest] 19 | version = "0.12" 20 | default-features = false 21 | features = ["rustls-tls", "blocking", "json"] 22 | 23 | [dependencies.crates_io_api] 24 | version = "0.11" 25 | default-features = false 26 | features = ["rustls"] 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rust web framework comparison 2 | 3 | A comparison of some web frameworks written in [Rust](https://www.rust-lang.org). 4 | 5 | This overview only contains frameworks that work on stable Rust. 6 | 7 | ## Table of Contents 8 | 9 | - [Frontend frameworks (WASM)](#frontend-frameworks-wasm) 10 | - [Outdated frontend frameworks](#outdated-frontend-frameworks) 11 | - [Server frameworks](#server-frameworks) 12 | - [High-Level Server Frameworks](#high-level-server-frameworks) 13 | - [Low-Level Frameworks](#low-level-frameworks) 14 | - [Outdated server frameworks](#outdated-server-frameworks) 15 | - [Client frameworks](#client-frameworks) 16 | - [Outdated client frameworks](#outdated-client-frameworks) 17 | - [Templating](#templating) 18 | - [Websocket Libraries](#websocket-libraries) 19 | 20 | ## Frontend frameworks (WASM) 21 | 22 | Since [WASM](http://webassembly.org/) support is available in most browsers we can use Rust to build web applications :) 23 | 24 | | Name | Stars | Contributors | Activity | Downloads | Virtual DOM | SSR | Rendering | Architecture | Repo | Docs | License | Version | 25 | |----------------------------------------------------------|--------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|-----------|-------------|-----|-----------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-------------------------------------------------------------------------------| 26 | | **[Dioxus](https://dioxuslabs.com/)** | ![Dioxus stars](https://img.shields.io/github/stars/dioxuslabs/dioxus.svg?label=%20) | ![Dioxus contributors](https://img.shields.io/github/contributors/dioxuslabs/dioxus.svg?label=%20) | ![Dioxus activity](https://img.shields.io/github/commit-activity/y/dioxuslabs/dioxus.svg?label=%20) | 513.6k | yes | yes | HTML | [React/Redux](https://medium.com/mofed/react-redux-architecture-overview-7b3e52004b6e) | [![Dioxus repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/dioxuslabs/dioxus) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=dioxus&color=green)](https://docs.rs/dioxus/) | ![Dioxus license](https://img.shields.io/crates/l/dioxus.svg?label=%20) | ![Dioxus version](https://img.shields.io/crates/v/dioxus.svg?label=%20) | 27 | | **[dominator](https://github.com/Pauan/rust-dominator)** | ![dominator stars](https://img.shields.io/github/stars/Pauan/rust-dominator.svg?label=%20) | ![dominator contributors](https://img.shields.io/github/contributors/Pauan/rust-dominator.svg?label=%20) | ![dominator activity](https://img.shields.io/github/commit-activity/y/Pauan/rust-dominator.svg?label=%20) | 213.0k | no | no | HTML | [FRP](https://en.wikipedia.org/wiki/Functional_reactive_programming) | [![dominator repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/Pauan/rust-dominator) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=dominator&color=green)](https://docs.rs/dominator/) | ![dominator license](https://img.shields.io/crates/l/dominator.svg?label=%20) | ![dominator version](https://img.shields.io/crates/v/dominator.svg?label=%20) | 28 | | **[egui](https://www.egui.rs/)** | ![egui stars](https://img.shields.io/github/stars/emilk/egui.svg?label=%20) | ![egui contributors](https://img.shields.io/github/contributors/emilk/egui.svg?label=%20) | ![egui activity](https://img.shields.io/github/commit-activity/y/emilk/egui.svg?label=%20) | 6841.7k | no | no | Canvas | [ImGUI](https://en.wikipedia.org/wiki/Immediate_mode_GUI) | [![egui repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/emilk/egui) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=egui&color=green)](https://docs.rs/egui/) | ![egui license](https://img.shields.io/crates/l/egui.svg?label=%20) | ![egui version](https://img.shields.io/crates/v/egui.svg?label=%20) | 29 | | **[Leptos](https://leptos.dev/)** | ![Leptos stars](https://img.shields.io/github/stars/leptos-rs/leptos.svg?label=%20) | ![Leptos contributors](https://img.shields.io/github/contributors/leptos-rs/leptos.svg?label=%20) | ![Leptos activity](https://img.shields.io/github/commit-activity/y/leptos-rs/leptos.svg?label=%20) | 1272.2k | no | yes | HTML | [FRP](https://en.wikipedia.org/wiki/Functional_reactive_programming) | [![Leptos repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/leptos-rs/leptos) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=leptos&color=green)](https://docs.rs/leptos/) | ![Leptos license](https://img.shields.io/crates/l/leptos.svg?label=%20) | ![Leptos version](https://img.shields.io/crates/v/leptos.svg?label=%20) | 30 | | **[sauron](https://github.com/ivanceras/sauron)** | ![sauron stars](https://img.shields.io/github/stars/ivanceras/sauron.svg?label=%20) | ![sauron contributors](https://img.shields.io/github/contributors/ivanceras/sauron.svg?label=%20) | ![sauron activity](https://img.shields.io/github/commit-activity/y/ivanceras/sauron.svg?label=%20) | 396.6k | yes | yes | HTML | [TEA](https://guide.elm-lang.org/architecture/) | [![sauron repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/ivanceras/sauron) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=sauron&color=green)](https://docs.rs/sauron/) | ![sauron license](https://img.shields.io/crates/l/sauron.svg?label=%20) | ![sauron version](https://img.shields.io/crates/v/sauron.svg?label=%20) | 31 | | **[Silkenweb](https://github.com/silkenweb/silkenweb)** | ![Silkenweb stars](https://img.shields.io/github/stars/silkenweb/silkenweb.svg?label=%20) | ![Silkenweb contributors](https://img.shields.io/github/contributors/silkenweb/silkenweb.svg?label=%20) | ![Silkenweb activity](https://img.shields.io/github/commit-activity/y/silkenweb/silkenweb.svg?label=%20) | 13.3k | no | yes | HTML | [FRP](https://en.wikipedia.org/wiki/Functional_reactive_programming) | [![Silkenweb repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/silkenweb/silkenweb) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=silkenweb&color=green)](https://docs.rs/silkenweb/) | ![Silkenweb license](https://img.shields.io/crates/l/silkenweb.svg?label=%20) | ![Silkenweb version](https://img.shields.io/crates/v/silkenweb.svg?label=%20) | 32 | | **[Sycamore](https://sycamore-rs.netlify.app/)** | ![Sycamore stars](https://img.shields.io/github/stars/sycamore-rs/sycamore.svg?label=%20) | ![Sycamore contributors](https://img.shields.io/github/contributors/sycamore-rs/sycamore.svg?label=%20) | ![Sycamore activity](https://img.shields.io/github/commit-activity/y/sycamore-rs/sycamore.svg?label=%20) | 197.5k | no | yes | HTML | [FRP](https://en.wikipedia.org/wiki/Functional_reactive_programming) | [![Sycamore repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/sycamore-rs/sycamore) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=sycamore&color=green)](https://docs.rs/sycamore/) | ![Sycamore license](https://img.shields.io/crates/l/sycamore.svg?label=%20) | ![Sycamore version](https://img.shields.io/crates/v/sycamore.svg?label=%20) | 33 | | **[Vizia](https://github.com/vizia/vizia)** | ![Vizia stars](https://img.shields.io/github/stars/vizia/vizia.svg?label=%20) | ![Vizia contributors](https://img.shields.io/github/contributors/vizia/vizia.svg?label=%20) | ![Vizia activity](https://img.shields.io/github/commit-activity/y/vizia/vizia.svg?label=%20) | 3.4k | no | no | Canvas | | [![Vizia repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/vizia/vizia) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=vizia&color=green)](https://docs.rs/vizia/) | ![Vizia license](https://img.shields.io/crates/l/vizia.svg?label=%20) | ![Vizia version](https://img.shields.io/crates/v/vizia.svg?label=%20) | 34 | 35 | ### Outdated frontend frameworks 36 | 37 | | Name | Stars | Contributors | Activity | Downloads | Virtual DOM | SSR | Rendering | Architecture | Repo | Docs | License | Version | 38 | |------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|-----------|-------------|-----|-----------|----------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------| 39 | | **[dodrio](https://github.com/fitzgen/dodrio)** | ![dodrio stars](https://img.shields.io/github/stars/fitzgen/dodrio.svg?label=%20) | ![dodrio contributors](https://img.shields.io/github/contributors/fitzgen/dodrio.svg?label=%20) | ![dodrio activity](https://img.shields.io/github/commit-activity/y/fitzgen/dodrio.svg?label=%20) | 162.3k | | | | | [![dodrio repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/fitzgen/dodrio) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=dodrio&color=green)](https://docs.rs/dodrio/) | ![dodrio license](https://img.shields.io/crates/l/dodrio.svg?label=%20) | ![dodrio version](https://img.shields.io/crates/v/dodrio.svg?label=%20) | 40 | | **[draco](https://github.com/utkarshkukreti/draco)** | ![draco stars](https://img.shields.io/github/stars/utkarshkukreti/draco.svg?label=%20) | ![draco contributors](https://img.shields.io/github/contributors/utkarshkukreti/draco.svg?label=%20) | ![draco activity](https://img.shields.io/github/commit-activity/y/utkarshkukreti/draco.svg?label=%20) | 5.0k | | | | | [![draco repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/utkarshkukreti/draco) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=draco&color=green)](https://docs.rs/draco/) | ![draco license](https://img.shields.io/crates/l/draco.svg?label=%20) | ![draco version](https://img.shields.io/crates/v/draco.svg?label=%20) | 41 | | **[dumle](https://github.com/axelf4/dumle)** | ![dumle stars](https://img.shields.io/github/stars/axelf4/dumle.svg?label=%20) | ![dumle contributors](https://img.shields.io/github/contributors/axelf4/dumle.svg?label=%20) | ![dumle activity](https://img.shields.io/github/commit-activity/y/axelf4/dumle.svg?label=%20) | - | | | | | [![dumle repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/axelf4/dumle) | | | | 42 | | **[frender](https://frender-rs.github.io/frender/)** | ![frender stars](https://img.shields.io/github/stars/frender-rs/frender.svg?label=%20) | ![frender contributors](https://img.shields.io/github/contributors/frender-rs/frender.svg?label=%20) | ![frender activity](https://img.shields.io/github/commit-activity/y/frender-rs/frender.svg?label=%20) | 5.4k | yes | no | | | [![frender repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/frender-rs/frender) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=frender&color=green)](https://docs.rs/frender/) | ![frender license](https://img.shields.io/crates/l/frender.svg?label=%20) | ![frender version](https://img.shields.io/crates/v/frender.svg?label=%20) | 43 | | **[Iced](https://iced.rs/)** | ![Iced stars](https://img.shields.io/github/stars/iced-rs/iced.svg?label=%20) | ![Iced contributors](https://img.shields.io/github/contributors/iced-rs/iced.svg?label=%20) | ![Iced activity](https://img.shields.io/github/commit-activity/y/iced-rs/iced.svg?label=%20) | 855.8k | no | no | Canvas | [TEA](https://guide.elm-lang.org/architecture/) | [![Iced repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/iced-rs/iced) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=iced&color=green)](https://docs.rs/iced/) | ![Iced license](https://img.shields.io/crates/l/iced.svg?label=%20) | ![Iced version](https://img.shields.io/crates/v/iced.svg?label=%20) | 44 | | **[Kobold](https://github.com/maciejhirsz/kobold)** | ![Kobold stars](https://img.shields.io/github/stars/maciejhirsz/kobold.svg?label=%20) | ![Kobold contributors](https://img.shields.io/github/contributors/maciejhirsz/kobold.svg?label=%20) | ![Kobold activity](https://img.shields.io/github/commit-activity/y/maciejhirsz/kobold.svg?label=%20) | 14.8k | no | | HTML | [React/Redux](https://medium.com/mofed/react-redux-architecture-overview-7b3e52004b6e) | [![Kobold repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/maciejhirsz/kobold) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=kobold&color=green)](https://docs.rs/kobold/) | ![Kobold license](https://img.shields.io/crates/l/kobold.svg?label=%20) | ![Kobold version](https://img.shields.io/crates/v/kobold.svg?label=%20) | 45 | | **[mika](https://gitlab.com/limira-rs/mika)** | | | | 1.6k | | | | | [![Repo](https://img.shields.io/badge/GitLab-git-blue)](https://gitlab.com/limira-rs/mika) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=mika&color=green)](https://docs.rs/mika/) | ![mika license](https://img.shields.io/crates/l/mika.svg?label=%20) | ![mika version](https://img.shields.io/crates/v/mika.svg?label=%20) | 46 | | **[mogwai](https://github.com/schell/mogwai)** | ![mogwai stars](https://img.shields.io/github/stars/schell/mogwai.svg?label=%20) | ![mogwai contributors](https://img.shields.io/github/contributors/schell/mogwai.svg?label=%20) | ![mogwai activity](https://img.shields.io/github/commit-activity/y/schell/mogwai.svg?label=%20) | 43.9k | no | yes | HTML | | [![mogwai repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/schell/mogwai) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=mogwai&color=green)](https://docs.rs/mogwai/) | ![mogwai license](https://img.shields.io/crates/l/mogwai.svg?label=%20) | ![mogwai version](https://img.shields.io/crates/v/mogwai.svg?label=%20) | 47 | | **[MoonZoon](http://moonzoon.rs/)** | ![MoonZoon stars](https://img.shields.io/github/stars/MoonZoon/MoonZoon.svg?label=%20) | ![MoonZoon contributors](https://img.shields.io/github/contributors/MoonZoon/MoonZoon.svg?label=%20) | ![MoonZoon activity](https://img.shields.io/github/commit-activity/y/MoonZoon/MoonZoon.svg?label=%20) | - | no | no | HTML | [FRP](https://en.wikipedia.org/wiki/Functional_reactive_programming) | [![MoonZoon repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/MoonZoon/MoonZoon) | | | | 48 | | **[percy](https://chinedufn.github.io/percy/)** | ![percy stars](https://img.shields.io/github/stars/chinedufn/percy.svg?label=%20) | ![percy contributors](https://img.shields.io/github/contributors/chinedufn/percy.svg?label=%20) | ![percy activity](https://img.shields.io/github/commit-activity/y/chinedufn/percy.svg?label=%20) | 41.0k | yes | yes | HTML | | [![percy repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/chinedufn/percy) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=percy-dom&color=green)](https://docs.rs/percy-dom/) | ![percy license](https://img.shields.io/crates/l/percy-dom.svg?label=%20) | ![percy version](https://img.shields.io/crates/v/percy-dom.svg?label=%20) | 49 | | **[ruukh](https://github.com/csharad/ruukh)** | ![ruukh stars](https://img.shields.io/github/stars/csharad/ruukh.svg?label=%20) | ![ruukh contributors](https://img.shields.io/github/contributors/csharad/ruukh.svg?label=%20) | ![ruukh activity](https://img.shields.io/github/commit-activity/y/csharad/ruukh.svg?label=%20) | 4.8k | | | | | [![ruukh repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/csharad/ruukh) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=ruukh&color=green)](https://docs.rs/ruukh/) | ![ruukh license](https://img.shields.io/crates/l/ruukh.svg?label=%20) | ![ruukh version](https://img.shields.io/crates/v/ruukh.svg?label=%20) | 50 | | **[Seed](http://seed-rs.org/)** | ![Seed stars](https://img.shields.io/github/stars/seed-rs/seed.svg?label=%20) | ![Seed contributors](https://img.shields.io/github/contributors/seed-rs/seed.svg?label=%20) | ![Seed activity](https://img.shields.io/github/commit-activity/y/seed-rs/seed.svg?label=%20) | 348.6k | yes | no | HTML | [TEA](https://guide.elm-lang.org/architecture/) | [![Seed repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/seed-rs/seed) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=seed&color=green)](https://docs.rs/seed/) | ![Seed license](https://img.shields.io/crates/l/seed.svg?label=%20) | ![Seed version](https://img.shields.io/crates/v/seed.svg?label=%20) | 51 | | **[smithy](https://www.smithy.rs/)** | ![smithy stars](https://img.shields.io/github/stars/rbalicki2/smithy.svg?label=%20) | ![smithy contributors](https://img.shields.io/github/contributors/rbalicki2/smithy.svg?label=%20) | ![smithy activity](https://img.shields.io/github/commit-activity/y/rbalicki2/smithy.svg?label=%20) | 11.8k | | | | | [![smithy repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/rbalicki2/smithy) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=smithy&color=green)](https://docs.rs/smithy/) | ![smithy license](https://img.shields.io/crates/l/smithy.svg?label=%20) | ![smithy version](https://img.shields.io/crates/v/smithy.svg?label=%20) | 52 | | **[spair](https://github.com/aclueless/spair)** | ![spair stars](https://img.shields.io/github/stars/aclueless/spair.svg?label=%20) | ![spair contributors](https://img.shields.io/github/contributors/aclueless/spair.svg?label=%20) | ![spair activity](https://img.shields.io/github/commit-activity/y/aclueless/spair.svg?label=%20) | 9.6k | no | no | HTML | | [![spair repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/aclueless/spair) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=spair&color=green)](https://docs.rs/spair/) | ![spair license](https://img.shields.io/crates/l/spair.svg?label=%20) | ![spair version](https://img.shields.io/crates/v/spair.svg?label=%20) | 53 | | **[squark](https://github.com/rail44/squark)** | ![squark stars](https://img.shields.io/github/stars/rail44/squark.svg?label=%20) | ![squark contributors](https://img.shields.io/github/contributors/rail44/squark.svg?label=%20) | ![squark activity](https://img.shields.io/github/commit-activity/y/rail44/squark.svg?label=%20) | 21.1k | | | | | [![squark repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/rail44/squark) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=squark&color=green)](https://docs.rs/squark/) | ![squark license](https://img.shields.io/crates/l/squark.svg?label=%20) | ![squark version](https://img.shields.io/crates/v/squark.svg?label=%20) | 54 | | **[stdweb](https://github.com/koute/stdweb)** | ![stdweb stars](https://img.shields.io/github/stars/koute/stdweb.svg?label=%20) | ![stdweb contributors](https://img.shields.io/github/contributors/koute/stdweb.svg?label=%20) | ![stdweb activity](https://img.shields.io/github/commit-activity/y/koute/stdweb.svg?label=%20) | 12074.5k | | | | | [![stdweb repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/koute/stdweb) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=stdweb&color=green)](https://docs.rs/stdweb/) | ![stdweb license](https://img.shields.io/crates/l/stdweb.svg?label=%20) | ![stdweb version](https://img.shields.io/crates/v/stdweb.svg?label=%20) | 55 | | **[willow](https://github.com/sindreij/willow)** | ![willow stars](https://img.shields.io/github/stars/sindreij/willow.svg?label=%20) | ![willow contributors](https://img.shields.io/github/contributors/sindreij/willow.svg?label=%20) | ![willow activity](https://img.shields.io/github/commit-activity/y/sindreij/willow.svg?label=%20) | - | | | | | [![willow repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/sindreij/willow) | | | | 56 | | **[yew](https://yew.rs/)** | ![yew stars](https://img.shields.io/github/stars/yewstack/yew.svg?label=%20) | ![yew contributors](https://img.shields.io/github/contributors/yewstack/yew.svg?label=%20) | ![yew activity](https://img.shields.io/github/commit-activity/y/yewstack/yew.svg?label=%20) | 1906.4k | yes | yes | HTML | [React/Redux](https://medium.com/mofed/react-redux-architecture-overview-7b3e52004b6e) | [![yew repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/yewstack/yew) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=Yew&color=green)](https://docs.rs/Yew/) | ![yew license](https://img.shields.io/crates/l/Yew.svg?label=%20) | ![yew version](https://img.shields.io/crates/v/Yew.svg?label=%20) | 57 | 58 | ## Server frameworks 59 | 60 | ### High-Level Server Frameworks 61 | 62 | | Name | Stars | Contributors | Activity | Repo | Docs | License | Version | Async | HTTPS | HTTP/2 | Base | Client | 63 | |---------------------------------------------------|-------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-------------------------------------------------------------------------------|-------|-------|--------|------------------|--------| 64 | | **[actix-web](https://actix.rs/)** | ![actix-web stars](https://img.shields.io/github/stars/actix/actix-web.svg?label=%20) | ![actix-web contributors](https://img.shields.io/github/contributors/actix/actix-web.svg?label=%20) | ![actix-web activity](https://img.shields.io/github/commit-activity/y/actix/actix-web.svg?label=%20) | [![actix-web repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/actix/actix-web) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=actix-web&color=green)](https://docs.rs/actix-web/) | ![actix-web license](https://img.shields.io/crates/l/actix-web.svg?label=%20) | ![actix-web version](https://img.shields.io/crates/v/actix-web.svg?label=%20) | yes | yes | yes | tokio | no | 65 | | **[axum](https://github.com/tokio-rs/axum)** | ![axum stars](https://img.shields.io/github/stars/tokio-rs/axum.svg?label=%20) | ![axum contributors](https://img.shields.io/github/contributors/tokio-rs/axum.svg?label=%20) | ![axum activity](https://img.shields.io/github/commit-activity/y/tokio-rs/axum.svg?label=%20) | [![axum repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/tokio-rs/axum) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=axum&color=green)](https://docs.rs/axum/) | ![axum license](https://img.shields.io/crates/l/axum.svg?label=%20) | ![axum version](https://img.shields.io/crates/v/axum.svg?label=%20) | yes | yes | yes | hyper | no | 66 | | **[loco](https://github.com/loco-rs/loco)** | ![loco stars](https://img.shields.io/github/stars/loco-rs/loco.svg?label=%20) | ![loco contributors](https://img.shields.io/github/contributors/loco-rs/loco.svg?label=%20) | ![loco activity](https://img.shields.io/github/commit-activity/y/loco-rs/loco.svg?label=%20) | [![loco repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/loco-rs/loco) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=loco-rs&color=green)](https://docs.rs/loco-rs/) | ![loco license](https://img.shields.io/crates/l/loco-rs.svg?label=%20) | ![loco version](https://img.shields.io/crates/v/loco-rs.svg?label=%20) | yes | yes | yes | tokio | no | 67 | | **[ntex](https://github.com/ntex-rs/ntex)** | ![ntex stars](https://img.shields.io/github/stars/ntex-rs/ntex.svg?label=%20) | ![ntex contributors](https://img.shields.io/github/contributors/ntex-rs/ntex.svg?label=%20) | ![ntex activity](https://img.shields.io/github/commit-activity/y/ntex-rs/ntex.svg?label=%20) | [![ntex repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/ntex-rs/ntex) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=ntex&color=green)](https://docs.rs/ntex/) | ![ntex license](https://img.shields.io/crates/l/ntex.svg?label=%20) | ![ntex version](https://img.shields.io/crates/v/ntex.svg?label=%20) | yes | yes | yes | ntex-rt | yes | 68 | | **[Ohkami](https://github.com/ohkami-rs/ohkami)** | ![Ohkami stars](https://img.shields.io/github/stars/ohkami-rs/ohkami.svg?label=%20) | ![Ohkami contributors](https://img.shields.io/github/contributors/ohkami-rs/ohkami.svg?label=%20) | ![Ohkami activity](https://img.shields.io/github/commit-activity/y/ohkami-rs/ohkami.svg?label=%20) | [![Ohkami repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/ohkami-rs/ohkami) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=ohkami&color=green)](https://docs.rs/ohkami/) | ![Ohkami license](https://img.shields.io/crates/l/ohkami.svg?label=%20) | ![Ohkami version](https://img.shields.io/crates/v/ohkami.svg?label=%20) | yes | | | various runtimes | no | 69 | | **[Poem](https://github.com/poem-web/poem)** | ![Poem stars](https://img.shields.io/github/stars/poem-web/poem.svg?label=%20) | ![Poem contributors](https://img.shields.io/github/contributors/poem-web/poem.svg?label=%20) | ![Poem activity](https://img.shields.io/github/commit-activity/y/poem-web/poem.svg?label=%20) | [![Poem repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/poem-web/poem) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=poem&color=green)](https://docs.rs/poem/) | ![Poem license](https://img.shields.io/crates/l/poem.svg?label=%20) | ![Poem version](https://img.shields.io/crates/v/poem.svg?label=%20) | yes | yes | yes | hyper | no | 70 | | **[rocket](https://rocket.rs/)** | ![rocket stars](https://img.shields.io/github/stars/SergioBenitez/rocket.svg?label=%20) | ![rocket contributors](https://img.shields.io/github/contributors/SergioBenitez/rocket.svg?label=%20) | ![rocket activity](https://img.shields.io/github/commit-activity/y/SergioBenitez/rocket.svg?label=%20) | [![rocket repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/SergioBenitez/rocket) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=rocket&color=green)](https://docs.rs/rocket/) | ![rocket license](https://img.shields.io/crates/l/rocket.svg?label=%20) | ![rocket version](https://img.shields.io/crates/v/rocket.svg?label=%20) | yes | yes | yes | hyper | no | 71 | | **[salvo](https://github.com/salvo-rs/salvo)** | ![salvo stars](https://img.shields.io/github/stars/salvo-rs/salvo.svg?label=%20) | ![salvo contributors](https://img.shields.io/github/contributors/salvo-rs/salvo.svg?label=%20) | ![salvo activity](https://img.shields.io/github/commit-activity/y/salvo-rs/salvo.svg?label=%20) | [![salvo repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/salvo-rs/salvo) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=salvo&color=green)](https://docs.rs/salvo/) | ![salvo license](https://img.shields.io/crates/l/salvo.svg?label=%20) | ![salvo version](https://img.shields.io/crates/v/salvo.svg?label=%20) | yes | yes | yes | hyper | no | 72 | | **[trillium](https://trillium.rs/)** | ![trillium stars](https://img.shields.io/github/stars/trillium-rs/trillium.svg?label=%20) | ![trillium contributors](https://img.shields.io/github/contributors/trillium-rs/trillium.svg?label=%20) | ![trillium activity](https://img.shields.io/github/commit-activity/y/trillium-rs/trillium.svg?label=%20) | [![trillium repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/trillium-rs/trillium) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=trillium&color=green)](https://docs.rs/trillium/) | ![trillium license](https://img.shields.io/crates/l/trillium.svg?label=%20) | ![trillium version](https://img.shields.io/crates/v/trillium.svg?label=%20) | yes | yes | no | tokio | no | 73 | | **[Viz](https://viz.rs/)** | ![Viz stars](https://img.shields.io/github/stars/viz-rs/viz.svg?label=%20) | ![Viz contributors](https://img.shields.io/github/contributors/viz-rs/viz.svg?label=%20) | ![Viz activity](https://img.shields.io/github/commit-activity/y/viz-rs/viz.svg?label=%20) | [![Viz repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/viz-rs/viz) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=viz&color=green)](https://docs.rs/viz/) | ![Viz license](https://img.shields.io/crates/l/viz.svg?label=%20) | ![Viz version](https://img.shields.io/crates/v/viz.svg?label=%20) | yes | yes | yes | hyper | no | 74 | | **[wtx](https://c410-f3r.github.io/wtx/)** | ![wtx stars](https://img.shields.io/github/stars/c410-f3r/wtx.svg?label=%20) | ![wtx contributors](https://img.shields.io/github/contributors/c410-f3r/wtx.svg?label=%20) | ![wtx activity](https://img.shields.io/github/commit-activity/y/c410-f3r/wtx.svg?label=%20) | [![wtx repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/c410-f3r/wtx) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=wtx&color=green)](https://docs.rs/wtx/) | ![wtx license](https://img.shields.io/crates/l/wtx.svg?label=%20) | ![wtx version](https://img.shields.io/crates/v/wtx.svg?label=%20) | yes | yes | yes | wtx | yes | 75 | | **[zino](https://github.com/photino/zino)** | ![zino stars](https://img.shields.io/github/stars/photino/zino.svg?label=%20) | ![zino contributors](https://img.shields.io/github/contributors/photino/zino.svg?label=%20) | ![zino activity](https://img.shields.io/github/commit-activity/y/photino/zino.svg?label=%20) | [![zino repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/photino/zino) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=zino&color=green)](https://docs.rs/zino/) | ![zino license](https://img.shields.io/crates/l/zino.svg?label=%20) | ![zino version](https://img.shields.io/crates/v/zino.svg?label=%20) | yes | | | | | 76 | 77 | ### Low-Level Frameworks 78 | 79 | | Name | Stars | Contributors | Activity | Repo | Docs | License | Version | Async | HTTPS | HTTP/2 | Base | Client | 80 | |-----------------------------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------|-------|-------|--------|------|--------| 81 | | **[actix-http](https://github.com/actix/actix-web/tree/master/actix-http)** | ![actix-http stars](https://img.shields.io/github/stars/actix/actix-web.svg?label=%20) | ![actix-http contributors](https://img.shields.io/github/contributors/actix/actix-web.svg?label=%20) | ![actix-http activity](https://img.shields.io/github/commit-activity/y/actix/actix-web.svg?label=%20) | [![actix-http repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/actix/actix-web) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=actix-http&color=green)](https://docs.rs/actix-http/) | ![actix-http license](https://img.shields.io/crates/l/actix-http.svg?label=%20) | ![actix-http version](https://img.shields.io/crates/v/actix-http.svg?label=%20) | yes | yes | yes | | yes | 82 | | **[hyper](http://hyper.rs/)** | ![hyper stars](https://img.shields.io/github/stars/hyperium/hyper.svg?label=%20) | ![hyper contributors](https://img.shields.io/github/contributors/hyperium/hyper.svg?label=%20) | ![hyper activity](https://img.shields.io/github/commit-activity/y/hyperium/hyper.svg?label=%20) | [![hyper repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/hyperium/hyper) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=hyper&color=green)](https://docs.rs/hyper/) | ![hyper license](https://img.shields.io/crates/l/hyper.svg?label=%20) | ![hyper version](https://img.shields.io/crates/v/hyper.svg?label=%20) | yes | yes | yes | | yes | 83 | | **[xitca-web](https://github.com/HFQR/xitca-web)** | ![xitca-web stars](https://img.shields.io/github/stars/HFQR/xitca-web.svg?label=%20) | ![xitca-web contributors](https://img.shields.io/github/contributors/HFQR/xitca-web.svg?label=%20) | ![xitca-web activity](https://img.shields.io/github/commit-activity/y/HFQR/xitca-web.svg?label=%20) | [![xitca-web repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/HFQR/xitca-web) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=xitca-web&color=green)](https://docs.rs/xitca-web/) | ![xitca-web license](https://img.shields.io/crates/l/xitca-web.svg?label=%20) | ![xitca-web version](https://img.shields.io/crates/v/xitca-web.svg?label=%20) | yes | | | | | 84 | 85 | ### Outdated server frameworks 86 | 87 | | Name | Stars | Contributors | Activity | Repo | Docs | License | Version | Async | HTTPS | HTTP/2 | Base | Client | 88 | |----------------------------------------------------------------|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|-------|-------|--------|------------------|--------| 89 | | **[cargonaouts](https://github.com/cargonauts-rs/cargonauts)** | ![cargonaouts stars](https://img.shields.io/github/stars/cargonauts-rs/cargonauts.svg?label=%20) | ![cargonaouts contributors](https://img.shields.io/github/contributors/cargonauts-rs/cargonauts.svg?label=%20) | ![cargonaouts activity](https://img.shields.io/github/commit-activity/y/cargonauts-rs/cargonauts.svg?label=%20) | [![cargonaouts repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/cargonauts-rs/cargonauts) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=cargonaouts&color=green)](https://docs.rs/cargonaouts/) | ![cargonaouts license](https://img.shields.io/crates/l/cargonaouts.svg?label=%20) | ![cargonaouts version](https://img.shields.io/crates/v/cargonaouts.svg?label=%20) | | | | | | 90 | | **[civet](https://github.com/wycats/rust-civet)** | ![civet stars](https://img.shields.io/github/stars/wycats/rust-civet.svg?label=%20) | ![civet contributors](https://img.shields.io/github/contributors/wycats/rust-civet.svg?label=%20) | ![civet activity](https://img.shields.io/github/commit-activity/y/wycats/rust-civet.svg?label=%20) | [![civet repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/wycats/rust-civet) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=civet&color=green)](https://docs.rs/civet/) | ![civet license](https://img.shields.io/crates/l/civet.svg?label=%20) | ![civet version](https://img.shields.io/crates/v/civet.svg?label=%20) | | | | | | 91 | | **[conduit](https://github.com/conduit-rust/conduit)** | ![conduit stars](https://img.shields.io/github/stars/conduit-rust/conduit.svg?label=%20) | ![conduit contributors](https://img.shields.io/github/contributors/conduit-rust/conduit.svg?label=%20) | ![conduit activity](https://img.shields.io/github/commit-activity/y/conduit-rust/conduit.svg?label=%20) | [![conduit repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/conduit-rust/conduit) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=conduit&color=green)](https://docs.rs/conduit/) | ![conduit license](https://img.shields.io/crates/l/conduit.svg?label=%20) | ![conduit version](https://img.shields.io/crates/v/conduit.svg?label=%20) | | | | | | 92 | | **[gotham](http://gotham.rs/)** | ![gotham stars](https://img.shields.io/github/stars/gotham-rs/gotham.svg?label=%20) | ![gotham contributors](https://img.shields.io/github/contributors/gotham-rs/gotham.svg?label=%20) | ![gotham activity](https://img.shields.io/github/commit-activity/y/gotham-rs/gotham.svg?label=%20) | [![gotham repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/gotham-rs/gotham) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=gotham&color=green)](https://docs.rs/gotham/) | ![gotham license](https://img.shields.io/crates/l/gotham.svg?label=%20) | ![gotham version](https://img.shields.io/crates/v/gotham.svg?label=%20) | yes | yes | no | hyper | no | 93 | | **[graphul](https://graphul-rs.github.io/)** | ![graphul stars](https://img.shields.io/github/stars/graphul-rs/graphul.svg?label=%20) | ![graphul contributors](https://img.shields.io/github/contributors/graphul-rs/graphul.svg?label=%20) | ![graphul activity](https://img.shields.io/github/commit-activity/y/graphul-rs/graphul.svg?label=%20) | [![graphul repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/graphul-rs/graphul) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=graphul&color=green)](https://docs.rs/graphul/) | ![graphul license](https://img.shields.io/crates/l/graphul.svg?label=%20) | ![graphul version](https://img.shields.io/crates/v/graphul.svg?label=%20) | yes | yes | yes | hyper | no | 94 | | **[hydrogen](https://github.com/nathansizemore/hydrogen)** | ![hydrogen stars](https://img.shields.io/github/stars/nathansizemore/hydrogen.svg?label=%20) | ![hydrogen contributors](https://img.shields.io/github/contributors/nathansizemore/hydrogen.svg?label=%20) | ![hydrogen activity](https://img.shields.io/github/commit-activity/y/nathansizemore/hydrogen.svg?label=%20) | [![hydrogen repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/nathansizemore/hydrogen) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=hydrogen&color=green)](https://docs.rs/hydrogen/) | ![hydrogen license](https://img.shields.io/crates/l/hydrogen.svg?label=%20) | ![hydrogen version](https://img.shields.io/crates/v/hydrogen.svg?label=%20) | | | | | | 95 | | **[iron](https://github.com/iron/iron)** | ![iron stars](https://img.shields.io/github/stars/iron/iron.svg?label=%20) | ![iron contributors](https://img.shields.io/github/contributors/iron/iron.svg?label=%20) | ![iron activity](https://img.shields.io/github/commit-activity/y/iron/iron.svg?label=%20) | [![iron repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/iron/iron) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=iron&color=green)](https://docs.rs/iron/) | ![iron license](https://img.shields.io/crates/l/iron.svg?label=%20) | ![iron version](https://img.shields.io/crates/v/iron.svg?label=%20) | | | | | | 96 | | **[kinglet](https://github.com/pyfisch/kinglet)** | ![kinglet stars](https://img.shields.io/github/stars/pyfisch/kinglet.svg?label=%20) | ![kinglet contributors](https://img.shields.io/github/contributors/pyfisch/kinglet.svg?label=%20) | ![kinglet activity](https://img.shields.io/github/commit-activity/y/pyfisch/kinglet.svg?label=%20) | [![kinglet repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/pyfisch/kinglet) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=kinglet&color=green)](https://docs.rs/kinglet/) | ![kinglet license](https://img.shields.io/crates/l/kinglet.svg?label=%20) | ![kinglet version](https://img.shields.io/crates/v/kinglet.svg?label=%20) | | | | | | 97 | | **[nickel](https://github.com/nickel-org/nickel.rs)** | ![nickel stars](https://img.shields.io/github/stars/nickel-org/nickel.rs.svg?label=%20) | ![nickel contributors](https://img.shields.io/github/contributors/nickel-org/nickel.rs.svg?label=%20) | ![nickel activity](https://img.shields.io/github/commit-activity/y/nickel-org/nickel.rs.svg?label=%20) | [![nickel repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/nickel-org/nickel.rs) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=nickel&color=green)](https://docs.rs/nickel/) | ![nickel license](https://img.shields.io/crates/l/nickel.svg?label=%20) | ![nickel version](https://img.shields.io/crates/v/nickel.svg?label=%20) | | | | | | 98 | | **[rouille](https://github.com/tomaka/rouille)** | ![rouille stars](https://img.shields.io/github/stars/tomaka/rouille.svg?label=%20) | ![rouille contributors](https://img.shields.io/github/contributors/tomaka/rouille.svg?label=%20) | ![rouille activity](https://img.shields.io/github/commit-activity/y/tomaka/rouille.svg?label=%20) | [![rouille repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/tomaka/rouille) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=rouille&color=green)](https://docs.rs/rouille/) | ![rouille license](https://img.shields.io/crates/l/rouille.svg?label=%20) | ![rouille version](https://img.shields.io/crates/v/rouille.svg?label=%20) | no | yes | | | no | 99 | | **[rustful](https://github.com/Ogeon/rustful)** | ![rustful stars](https://img.shields.io/github/stars/Ogeon/rustful.svg?label=%20) | ![rustful contributors](https://img.shields.io/github/contributors/Ogeon/rustful.svg?label=%20) | ![rustful activity](https://img.shields.io/github/commit-activity/y/Ogeon/rustful.svg?label=%20) | [![rustful repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/Ogeon/rustful) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=rustful&color=green)](https://docs.rs/rustful/) | ![rustful license](https://img.shields.io/crates/l/rustful.svg?label=%20) | ![rustful version](https://img.shields.io/crates/v/rustful.svg?label=%20) | | | | | | 100 | | **[rustless](https://github.com/rustless/rustless)** | ![rustless stars](https://img.shields.io/github/stars/rustless/rustless.svg?label=%20) | ![rustless contributors](https://img.shields.io/github/contributors/rustless/rustless.svg?label=%20) | ![rustless activity](https://img.shields.io/github/commit-activity/y/rustless/rustless.svg?label=%20) | [![rustless repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/rustless/rustless) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=rustless&color=green)](https://docs.rs/rustless/) | ![rustless license](https://img.shields.io/crates/l/rustless.svg?label=%20) | ![rustless version](https://img.shields.io/crates/v/rustless.svg?label=%20) | | | | | | 101 | | **[sappers](https://github.com/sappworks/sapper)** | ![sappers stars](https://img.shields.io/github/stars/sappworks/sapper.svg?label=%20) | ![sappers contributors](https://img.shields.io/github/contributors/sappworks/sapper.svg?label=%20) | ![sappers activity](https://img.shields.io/github/commit-activity/y/sappworks/sapper.svg?label=%20) | [![sappers repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/sappworks/sapper) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=sappers&color=green)](https://docs.rs/sappers/) | ![sappers license](https://img.shields.io/crates/l/sappers.svg?label=%20) | ![sappers version](https://img.shields.io/crates/v/sappers.svg?label=%20) | | | | | | 102 | | **[shio](https://github.com/mehcode/shio-rs)** | ![shio stars](https://img.shields.io/github/stars/mehcode/shio-rs.svg?label=%20) | ![shio contributors](https://img.shields.io/github/contributors/mehcode/shio-rs.svg?label=%20) | ![shio activity](https://img.shields.io/github/commit-activity/y/mehcode/shio-rs.svg?label=%20) | [![shio repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/mehcode/shio-rs) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=shio&color=green)](https://docs.rs/shio/) | ![shio license](https://img.shields.io/crates/l/shio.svg?label=%20) | ![shio version](https://img.shields.io/crates/v/shio.svg?label=%20) | | | | | | 103 | | **[solicit](https://github.com/mlalic/solicit)** | ![solicit stars](https://img.shields.io/github/stars/mlalic/solicit.svg?label=%20) | ![solicit contributors](https://img.shields.io/github/contributors/mlalic/solicit.svg?label=%20) | ![solicit activity](https://img.shields.io/github/commit-activity/y/mlalic/solicit.svg?label=%20) | [![solicit repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/mlalic/solicit) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=solicit&color=green)](https://docs.rs/solicit/) | ![solicit license](https://img.shields.io/crates/l/solicit.svg?label=%20) | ![solicit version](https://img.shields.io/crates/v/solicit.svg?label=%20) | | | | | | 104 | | **[Thruster](https://github.com/trezm/Thruster)** | ![Thruster stars](https://img.shields.io/github/stars/trezm/Thruster.svg?label=%20) | ![Thruster contributors](https://img.shields.io/github/contributors/trezm/Thruster.svg?label=%20) | ![Thruster activity](https://img.shields.io/github/commit-activity/y/trezm/Thruster.svg?label=%20) | [![Thruster repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/trezm/Thruster) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=thruster&color=green)](https://docs.rs/thruster/) | ![Thruster license](https://img.shields.io/crates/l/thruster.svg?label=%20) | ![Thruster version](https://img.shields.io/crates/v/thruster.svg?label=%20) | yes | yes | yes | tokio (or hyper) | no | 105 | | **[Tide](https://github.com/rustasync/tide)** | ![Tide stars](https://img.shields.io/github/stars/rustasync/tide.svg?label=%20) | ![Tide contributors](https://img.shields.io/github/contributors/rustasync/tide.svg?label=%20) | ![Tide activity](https://img.shields.io/github/commit-activity/y/rustasync/tide.svg?label=%20) | [![Tide repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/rustasync/tide) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=tide&color=green)](https://docs.rs/tide/) | ![Tide license](https://img.shields.io/crates/l/tide.svg?label=%20) | ![Tide version](https://img.shields.io/crates/v/tide.svg?label=%20) | yes | yes | no | async-std | no | 106 | | **[tiny-http](https://github.com/tiny-http/tiny-http)** | ![tiny-http stars](https://img.shields.io/github/stars/tiny-http/tiny-http.svg?label=%20) | ![tiny-http contributors](https://img.shields.io/github/contributors/tiny-http/tiny-http.svg?label=%20) | ![tiny-http activity](https://img.shields.io/github/commit-activity/y/tiny-http/tiny-http.svg?label=%20) | [![tiny-http repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/tiny-http/tiny-http) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=tiny_http&color=green)](https://docs.rs/tiny_http/) | ![tiny-http license](https://img.shields.io/crates/l/tiny_http.svg?label=%20) | ![tiny-http version](https://img.shields.io/crates/v/tiny_http.svg?label=%20) | no | yes | no | | no | 107 | | **[tk-http](https://github.com/swindon-rs/tk-http)** | ![tk-http stars](https://img.shields.io/github/stars/swindon-rs/tk-http.svg?label=%20) | ![tk-http contributors](https://img.shields.io/github/contributors/swindon-rs/tk-http.svg?label=%20) | ![tk-http activity](https://img.shields.io/github/commit-activity/y/swindon-rs/tk-http.svg?label=%20) | [![tk-http repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/swindon-rs/tk-http) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=tk-http&color=green)](https://docs.rs/tk-http/) | ![tk-http license](https://img.shields.io/crates/l/tk-http.svg?label=%20) | ![tk-http version](https://img.shields.io/crates/v/tk-http.svg?label=%20) | | | | | | 108 | | **[tower-web](https://github.com/carllerche/tower-web)** | ![tower-web stars](https://img.shields.io/github/stars/carllerche/tower-web.svg?label=%20) | ![tower-web contributors](https://img.shields.io/github/contributors/carllerche/tower-web.svg?label=%20) | ![tower-web activity](https://img.shields.io/github/commit-activity/y/carllerche/tower-web.svg?label=%20) | [![tower-web repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/carllerche/tower-web) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=tower-web&color=green)](https://docs.rs/tower-web/) | ![tower-web license](https://img.shields.io/crates/l/tower-web.svg?label=%20) | ![tower-web version](https://img.shields.io/crates/v/tower-web.svg?label=%20) | | | | | | 109 | | **[warp](https://github.com/seanmonstar/warp)** | ![warp stars](https://img.shields.io/github/stars/seanmonstar/warp.svg?label=%20) | ![warp contributors](https://img.shields.io/github/contributors/seanmonstar/warp.svg?label=%20) | ![warp activity](https://img.shields.io/github/commit-activity/y/seanmonstar/warp.svg?label=%20) | [![warp repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/seanmonstar/warp) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=warp&color=green)](https://docs.rs/warp/) | ![warp license](https://img.shields.io/crates/l/warp.svg?label=%20) | ![warp version](https://img.shields.io/crates/v/warp.svg?label=%20) | yes | yes | yes | hyper | no | 110 | 111 | ## Client frameworks 112 | 113 | To build web clients with Rust, you can choose between these libraries: 114 | 115 | - **reqwest** (- / [repository](https://github.com/seanmonstar/reqwest) / [documentation](https://docs.rs/reqwest)) 116 | - **awc** (- / [repository](https://github.com/actix/actix-web/tree/master/awc) / [api docs](https://docs.rs/awc)) 117 | - **hyper** ([homepage](http://hyper.rs/) / [repository](https://github.com/hyperium/hyper) / [documentation](http://hyper.rs/hyper/hyper/)) 118 | - **jsonrpc** (- / [repository](https://github.com/apoelstra/rust-jsonrpc/ ) / [documentation](https://www.wpsoftware.net/rustdoc/jsonrpc/)) 119 | 120 | ### Outdated client frameworks 121 | 122 | - [ease](https://github.com/SimonPersson/ease) 123 | 124 | 125 | ## Templating 126 | 127 | | Name | Repo | Docs | License | Version | Stars | Contributors | Activity | 128 | |--------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| 129 | | **[askama](https://askama.readthedocs.io/)** | [![askama repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/askama-rs/askama) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=askama&color=green)](https://docs.rs/askama/) | ![askama license](https://img.shields.io/crates/l/askama.svg?label=%20) | ![askama version](https://img.shields.io/crates/v/askama.svg?label=%20) | ![askama stars](https://img.shields.io/github/stars/askama-rs/askama.svg?label=%20) | ![askama contributors](https://img.shields.io/github/contributors/askama-rs/askama.svg?label=%20) | ![askama activity](https://img.shields.io/github/commit-activity/y/askama-rs/askama.svg?label=%20) | 130 | | **[handlebars](https://github.com/sunng87/handlebars-rust)** | [![handlebars repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/sunng87/handlebars-rust) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=handlebars&color=green)](https://docs.rs/handlebars/) | ![handlebars license](https://img.shields.io/crates/l/handlebars.svg?label=%20) | ![handlebars version](https://img.shields.io/crates/v/handlebars.svg?label=%20) | ![handlebars stars](https://img.shields.io/github/stars/sunng87/handlebars-rust.svg?label=%20) | ![handlebars contributors](https://img.shields.io/github/contributors/sunng87/handlebars-rust.svg?label=%20) | ![handlebars activity](https://img.shields.io/github/commit-activity/y/sunng87/handlebars-rust.svg?label=%20) | 131 | | **[liquid](https://github.com/cobalt-org/liquid-rust)** | [![liquid repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/cobalt-org/liquid-rust) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=liquid&color=green)](https://docs.rs/liquid/) | ![liquid license](https://img.shields.io/crates/l/liquid.svg?label=%20) | ![liquid version](https://img.shields.io/crates/v/liquid.svg?label=%20) | ![liquid stars](https://img.shields.io/github/stars/cobalt-org/liquid-rust.svg?label=%20) | ![liquid contributors](https://img.shields.io/github/contributors/cobalt-org/liquid-rust.svg?label=%20) | ![liquid activity](https://img.shields.io/github/commit-activity/y/cobalt-org/liquid-rust.svg?label=%20) | 132 | | **[maud](https://lfairy.gitbooks.io/maud/content)** | [![maud repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/lfairy/maud) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=maud&color=green)](https://docs.rs/maud/) | ![maud license](https://img.shields.io/crates/l/maud.svg?label=%20) | ![maud version](https://img.shields.io/crates/v/maud.svg?label=%20) | ![maud stars](https://img.shields.io/github/stars/lfairy/maud.svg?label=%20) | ![maud contributors](https://img.shields.io/github/contributors/lfairy/maud.svg?label=%20) | ![maud activity](https://img.shields.io/github/commit-activity/y/lfairy/maud.svg?label=%20) | 133 | | **[minijinja](https://github.com/mitsuhiko/minijinja)** | [![minijinja repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/mitsuhiko/minijinja) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=minijinja&color=green)](https://docs.rs/minijinja/) | ![minijinja license](https://img.shields.io/crates/l/minijinja.svg?label=%20) | ![minijinja version](https://img.shields.io/crates/v/minijinja.svg?label=%20) | ![minijinja stars](https://img.shields.io/github/stars/mitsuhiko/minijinja.svg?label=%20) | ![minijinja contributors](https://img.shields.io/github/contributors/mitsuhiko/minijinja.svg?label=%20) | ![minijinja activity](https://img.shields.io/github/commit-activity/y/mitsuhiko/minijinja.svg?label=%20) | 134 | | **[ructe](https://github.com/kaj/ructe)** | [![ructe repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/kaj/ructe) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=ructe&color=green)](https://docs.rs/ructe/) | ![ructe license](https://img.shields.io/crates/l/ructe.svg?label=%20) | ![ructe version](https://img.shields.io/crates/v/ructe.svg?label=%20) | ![ructe stars](https://img.shields.io/github/stars/kaj/ructe.svg?label=%20) | ![ructe contributors](https://img.shields.io/github/contributors/kaj/ructe.svg?label=%20) | ![ructe activity](https://img.shields.io/github/commit-activity/y/kaj/ructe.svg?label=%20) | 135 | | **[sailfish](https://rust-sailfish.github.io/sailfish/)** | [![sailfish repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/rust-sailfish/sailfish) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=sailfish&color=green)](https://docs.rs/sailfish/) | ![sailfish license](https://img.shields.io/crates/l/sailfish.svg?label=%20) | ![sailfish version](https://img.shields.io/crates/v/sailfish.svg?label=%20) | ![sailfish stars](https://img.shields.io/github/stars/rust-sailfish/sailfish.svg?label=%20) | ![sailfish contributors](https://img.shields.io/github/contributors/rust-sailfish/sailfish.svg?label=%20) | ![sailfish activity](https://img.shields.io/github/commit-activity/y/rust-sailfish/sailfish.svg?label=%20) | 136 | | **[srtemplate](https://sergioribera.github.io/srtemplate)** | [![srtemplate repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/SergioRibera/srtemplate) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=srtemplate&color=green)](https://docs.rs/srtemplate/) | ![srtemplate license](https://img.shields.io/crates/l/srtemplate.svg?label=%20) | ![srtemplate version](https://img.shields.io/crates/v/srtemplate.svg?label=%20) | ![srtemplate stars](https://img.shields.io/github/stars/SergioRibera/srtemplate.svg?label=%20) | ![srtemplate contributors](https://img.shields.io/github/contributors/SergioRibera/srtemplate.svg?label=%20) | ![srtemplate activity](https://img.shields.io/github/commit-activity/y/SergioRibera/srtemplate.svg?label=%20) | 137 | | **[tera](https://keats.github.io/tera/)** | [![tera repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/Keats/tera) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=tera&color=green)](https://docs.rs/tera/) | ![tera license](https://img.shields.io/crates/l/tera.svg?label=%20) | ![tera version](https://img.shields.io/crates/v/tera.svg?label=%20) | ![tera stars](https://img.shields.io/github/stars/Keats/tera.svg?label=%20) | ![tera contributors](https://img.shields.io/github/contributors/Keats/tera.svg?label=%20) | ![tera activity](https://img.shields.io/github/commit-activity/y/Keats/tera.svg?label=%20) | 138 | | **[UIBeam](https://github.com/ohkami-rs/uibeam)** | [![UIBeam repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/ohkami-rs/uibeam) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=uibeam&color=green)](https://docs.rs/uibeam/) | ![UIBeam license](https://img.shields.io/crates/l/uibeam.svg?label=%20) | ![UIBeam version](https://img.shields.io/crates/v/uibeam.svg?label=%20) | ![UIBeam stars](https://img.shields.io/github/stars/ohkami-rs/uibeam.svg?label=%20) | ![UIBeam contributors](https://img.shields.io/github/contributors/ohkami-rs/uibeam.svg?label=%20) | ![UIBeam activity](https://img.shields.io/github/commit-activity/y/ohkami-rs/uibeam.svg?label=%20) | 139 | 140 | ### Outdated templating libraries 141 | 142 | | Name | Repo | Docs | License | Version | Stars | Contributors | Activity | 143 | |--------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| 144 | | **[horrorshow](https://github.com/Stebalien/horrorshow-rs)** | [![horrorshow repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/Stebalien/horrorshow-rs) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=horrorshow&color=green)](https://docs.rs/horrorshow/) | ![horrorshow license](https://img.shields.io/crates/l/horrorshow.svg?label=%20) | ![horrorshow version](https://img.shields.io/crates/v/horrorshow.svg?label=%20) | ![horrorshow stars](https://img.shields.io/github/stars/Stebalien/horrorshow-rs.svg?label=%20) | ![horrorshow contributors](https://img.shields.io/github/contributors/Stebalien/horrorshow-rs.svg?label=%20) | ![horrorshow activity](https://img.shields.io/github/commit-activity/y/Stebalien/horrorshow-rs.svg?label=%20) | 145 | | **[markup](https://github.com/utkarshkukreti/markup.rs)** | [![markup repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/utkarshkukreti/markup.rs) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=markup&color=green)](https://docs.rs/markup/) | ![markup license](https://img.shields.io/crates/l/markup.svg?label=%20) | ![markup version](https://img.shields.io/crates/v/markup.svg?label=%20) | ![markup stars](https://img.shields.io/github/stars/utkarshkukreti/markup.rs.svg?label=%20) | ![markup contributors](https://img.shields.io/github/contributors/utkarshkukreti/markup.rs.svg?label=%20) | ![markup activity](https://img.shields.io/github/commit-activity/y/utkarshkukreti/markup.rs.svg?label=%20) | 146 | | **[mustache](https://github.com/nickel-org/rust-mustache)** | [![mustache repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/nickel-org/rust-mustache) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=mustache&color=green)](https://docs.rs/mustache/) | ![mustache license](https://img.shields.io/crates/l/mustache.svg?label=%20) | ![mustache version](https://img.shields.io/crates/v/mustache.svg?label=%20) | ![mustache stars](https://img.shields.io/github/stars/nickel-org/rust-mustache.svg?label=%20) | ![mustache contributors](https://img.shields.io/github/contributors/nickel-org/rust-mustache.svg?label=%20) | ![mustache activity](https://img.shields.io/github/commit-activity/y/nickel-org/rust-mustache.svg?label=%20) | 147 | | **[stpl](https://github.com/dpc/stpl)** | [![stpl repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/dpc/stpl) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=stpl&color=green)](https://docs.rs/stpl/) | ![stpl license](https://img.shields.io/crates/l/stpl.svg?label=%20) | ![stpl version](https://img.shields.io/crates/v/stpl.svg?label=%20) | ![stpl stars](https://img.shields.io/github/stars/dpc/stpl.svg?label=%20) | ![stpl contributors](https://img.shields.io/github/contributors/dpc/stpl.svg?label=%20) | ![stpl activity](https://img.shields.io/github/commit-activity/y/dpc/stpl.svg?label=%20) | 148 | | **[tinytemplate](https://github.com/bheisler/TinyTemplate)** | [![tinytemplate repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/bheisler/TinyTemplate) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=tinytemplate&color=green)](https://docs.rs/tinytemplate/) | ![tinytemplate license](https://img.shields.io/crates/l/tinytemplate.svg?label=%20) | ![tinytemplate version](https://img.shields.io/crates/v/tinytemplate.svg?label=%20) | ![tinytemplate stars](https://img.shields.io/github/stars/bheisler/TinyTemplate.svg?label=%20) | ![tinytemplate contributors](https://img.shields.io/github/contributors/bheisler/TinyTemplate.svg?label=%20) | ![tinytemplate activity](https://img.shields.io/github/commit-activity/y/bheisler/TinyTemplate.svg?label=%20) | 149 | | **[typed-html](https://github.com/bodil/typed-html)** | [![typed-html repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/bodil/typed-html) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=typed-html&color=green)](https://docs.rs/typed-html/) | ![typed-html license](https://img.shields.io/crates/l/typed-html.svg?label=%20) | ![typed-html version](https://img.shields.io/crates/v/typed-html.svg?label=%20) | ![typed-html stars](https://img.shields.io/github/stars/bodil/typed-html.svg?label=%20) | ![typed-html contributors](https://img.shields.io/github/contributors/bodil/typed-html.svg?label=%20) | ![typed-html activity](https://img.shields.io/github/commit-activity/y/bodil/typed-html.svg?label=%20) | 150 | 151 | ## Websocket Libraries 152 | 153 | | Name | Repo | Docs | License | Version | Stars | Contributors | Activity | Client | Server | Async | 154 | |------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|--------|--------|-------| 155 | | **[actix-web](https://actix.rs/docs/websockets/)** | [![actix-web repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/actix/actix-web) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=actix-web-actors&color=green)](https://docs.rs/actix-web-actors/) | ![actix-web license](https://img.shields.io/crates/l/actix-web-actors.svg?label=%20) | ![actix-web version](https://img.shields.io/crates/v/actix-web-actors.svg?label=%20) | ![actix-web stars](https://img.shields.io/github/stars/actix/actix-web.svg?label=%20) | ![actix-web contributors](https://img.shields.io/github/contributors/actix/actix-web.svg?label=%20) | ![actix-web activity](https://img.shields.io/github/commit-activity/y/actix/actix-web.svg?label=%20) | yes | yes | yes | 156 | | **[mews](https://github.com/ohkami-rs/mews)** | [![mews repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/ohkami-rs/mews) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=mews&color=green)](https://docs.rs/mews/) | ![mews license](https://img.shields.io/crates/l/mews.svg?label=%20) | ![mews version](https://img.shields.io/crates/v/mews.svg?label=%20) | ![mews stars](https://img.shields.io/github/stars/ohkami-rs/mews.svg?label=%20) | ![mews contributors](https://img.shields.io/github/contributors/ohkami-rs/mews.svg?label=%20) | ![mews activity](https://img.shields.io/github/commit-activity/y/ohkami-rs/mews.svg?label=%20) | no | yes | yes | 157 | | **[Ohkami](https://github.com/ohkami-rs/ohkami)** | [![Ohkami repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/ohkami-rs/ohkami) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=ohkami&color=green)](https://docs.rs/ohkami/) | ![Ohkami license](https://img.shields.io/crates/l/ohkami.svg?label=%20) | ![Ohkami version](https://img.shields.io/crates/v/ohkami.svg?label=%20) | ![Ohkami stars](https://img.shields.io/github/stars/ohkami-rs/ohkami.svg?label=%20) | ![Ohkami contributors](https://img.shields.io/github/contributors/ohkami-rs/ohkami.svg?label=%20) | ![Ohkami activity](https://img.shields.io/github/commit-activity/y/ohkami-rs/ohkami.svg?label=%20) | no | yes | yes | 158 | | **[tokio-tungstenite](https://github.com/snapview/tokio-tungstenite)** | [![tokio-tungstenite repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/snapview/tokio-tungstenite) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=tokio-tungstenite&color=green)](https://docs.rs/tokio-tungstenite/) | ![tokio-tungstenite license](https://img.shields.io/crates/l/tokio-tungstenite.svg?label=%20) | ![tokio-tungstenite version](https://img.shields.io/crates/v/tokio-tungstenite.svg?label=%20) | ![tokio-tungstenite stars](https://img.shields.io/github/stars/snapview/tokio-tungstenite.svg?label=%20) | ![tokio-tungstenite contributors](https://img.shields.io/github/contributors/snapview/tokio-tungstenite.svg?label=%20) | ![tokio-tungstenite activity](https://img.shields.io/github/commit-activity/y/snapview/tokio-tungstenite.svg?label=%20) | yes | yes | yes | 159 | | **[tungstenite](https://github.com/snapview/tungstenite-rs)** | [![tungstenite repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/snapview/tungstenite-rs) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=tungstenite&color=green)](https://docs.rs/tungstenite/) | ![tungstenite license](https://img.shields.io/crates/l/tungstenite.svg?label=%20) | ![tungstenite version](https://img.shields.io/crates/v/tungstenite.svg?label=%20) | ![tungstenite stars](https://img.shields.io/github/stars/snapview/tungstenite-rs.svg?label=%20) | ![tungstenite contributors](https://img.shields.io/github/contributors/snapview/tungstenite-rs.svg?label=%20) | ![tungstenite activity](https://img.shields.io/github/commit-activity/y/snapview/tungstenite-rs.svg?label=%20) | yes | yes | yes | 160 | | **[ws-rs](https://github.com/housleyjk/ws-rs)** | [![ws-rs repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/housleyjk/ws-rs) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=ws&color=green)](https://docs.rs/ws/) | ![ws-rs license](https://img.shields.io/crates/l/ws.svg?label=%20) | ![ws-rs version](https://img.shields.io/crates/v/ws.svg?label=%20) | ![ws-rs stars](https://img.shields.io/github/stars/housleyjk/ws-rs.svg?label=%20) | ![ws-rs contributors](https://img.shields.io/github/contributors/housleyjk/ws-rs.svg?label=%20) | ![ws-rs activity](https://img.shields.io/github/commit-activity/y/housleyjk/ws-rs.svg?label=%20) | yes | yes | yes | 161 | | **[wtx](https://c410-f3r.github.io/wtx/)** | [![wtx repo](https://img.shields.io/badge/GitHub-git-blue)](https://github.com/c410-f3r/wtx) | [![Docs](https://img.shields.io/static/v1?label=docs.rs&message=wtx&color=green)](https://docs.rs/wtx/) | ![wtx license](https://img.shields.io/crates/l/wtx.svg?label=%20) | ![wtx version](https://img.shields.io/crates/v/wtx.svg?label=%20) | ![wtx stars](https://img.shields.io/github/stars/c410-f3r/wtx.svg?label=%20) | ![wtx contributors](https://img.shields.io/github/contributors/c410-f3r/wtx.svg?label=%20) | ![wtx activity](https://img.shields.io/github/commit-activity/y/c410-f3r/wtx.svg?label=%20) | yes | yes | yes | 162 | -------------------------------------------------------------------------------- /README.tmpl: -------------------------------------------------------------------------------- 1 | # Rust web framework comparison 2 | 3 | A comparison of some web frameworks written in [Rust](https://www.rust-lang.org). 4 | 5 | This overview only contains frameworks that work on stable Rust. 6 | 7 | ## Table of Contents 8 | 9 | - [Frontend frameworks (WASM)](#frontend-frameworks-wasm) 10 | - [Outdated frontend frameworks](#outdated-frontend-frameworks) 11 | - [Server frameworks](#server-frameworks) 12 | - [High-Level Server Frameworks](#high-level-server-frameworks) 13 | - [Low-Level Frameworks](#low-level-frameworks) 14 | - [Outdated server frameworks](#outdated-server-frameworks) 15 | - [Client frameworks](#client-frameworks) 16 | - [Outdated client frameworks](#outdated-client-frameworks) 17 | - [Templating](#templating) 18 | - [Websocket Libraries](#websocket-libraries) 19 | 20 | ## Frontend frameworks (WASM) 21 | 22 | Since [WASM](http://webassembly.org/) support is available in most browsers we can use Rust to build web applications :) 23 | 24 | {{ frontend_frameworks }} 25 | 26 | ### Outdated frontend frameworks 27 | 28 | {{ outdated_frontend_frameworks }} 29 | 30 | ## Server frameworks 31 | 32 | ### High-Level Server Frameworks 33 | 34 | {{ server }} 35 | 36 | ### Low-Level Frameworks 37 | 38 | {{ low_level_server }} 39 | 40 | ### Outdated server frameworks 41 | 42 | {{ outdated_server }} 43 | 44 | ## Client frameworks 45 | 46 | To build web clients with Rust, you can choose between these libraries: 47 | 48 | - **reqwest** (- / [repository](https://github.com/seanmonstar/reqwest) / [documentation](https://docs.rs/reqwest)) 49 | - **awc** (- / [repository](https://github.com/actix/actix-web/tree/master/awc) / [api docs](https://docs.rs/awc)) 50 | - **hyper** ([homepage](http://hyper.rs/) / [repository](https://github.com/hyperium/hyper) / [documentation](http://hyper.rs/hyper/hyper/)) 51 | - **jsonrpc** (- / [repository](https://github.com/apoelstra/rust-jsonrpc/ ) / [documentation](https://www.wpsoftware.net/rustdoc/jsonrpc/)) 52 | 53 | ### Outdated client frameworks 54 | 55 | - [ease](https://github.com/SimonPersson/ease) 56 | 57 | 58 | ## Templating 59 | 60 | {{ templating }} 61 | 62 | ### Outdated templating libraries 63 | 64 | {{ outdated_templating }} 65 | 66 | ## Websocket Libraries 67 | 68 | {{ websocket }} 69 | -------------------------------------------------------------------------------- /data.toml: -------------------------------------------------------------------------------- 1 | ############# 2 | # Frontend # 3 | ############# 4 | 5 | [[frontend]] 6 | name = "yew" 7 | crates-io = "Yew" 8 | homepage = "https://yew.rs" 9 | repo = "https://github.com/yewstack/yew" 10 | vdom = true 11 | ssr = true 12 | rendering = "html" 13 | architecture = "react" 14 | outdated = true 15 | 16 | [[frontend]] 17 | name = "Seed" 18 | crates-io = "seed" 19 | homepage = "http://seed-rs.org/" 20 | repo = "https://github.com/seed-rs/seed" 21 | vdom = true 22 | ssr = false 23 | rendering = "html" 24 | architecture = "tea" 25 | outdated = true 26 | 27 | [[frontend]] 28 | name = "sauron" 29 | repo = "https://github.com/ivanceras/sauron" 30 | crates-io = "sauron" 31 | vdom = true 32 | ssr = true 33 | rendering = "html" 34 | architecture = "tea" 35 | 36 | [[frontend]] 37 | name = "mogwai" 38 | repo = "https://github.com/schell/mogwai" 39 | crates-io = "mogwai" 40 | vdom = false 41 | ssr = true 42 | rendering = "html" 43 | outdated = true 44 | 45 | [[frontend]] 46 | name = "dominator" 47 | repo = "https://github.com/Pauan/rust-dominator" 48 | crates-io = "dominator" 49 | vdom = false 50 | ssr = false 51 | rendering = "html" 52 | architecture = "frp" 53 | outdated = false 54 | 55 | [[frontend]] 56 | name = "Sycamore" 57 | homepage = "https://sycamore-rs.netlify.app" 58 | repo = "https://github.com/sycamore-rs/sycamore" 59 | crates-io = "sycamore" 60 | vdom = false 61 | ssr = true 62 | rendering = "html" 63 | architecture = "frp" 64 | outdated = false 65 | 66 | [[frontend]] 67 | name = "Dioxus" 68 | homepage = "https://dioxuslabs.com/" 69 | repo = "https://github.com/dioxuslabs/dioxus" 70 | crates-io = "dioxus" 71 | vdom = true 72 | ssr = true 73 | rendering = "html" 74 | architecture = "react" 75 | 76 | [[frontend]] 77 | name = "MoonZoon" 78 | homepage = "http://moonzoon.rs/" 79 | repo = "https://github.com/MoonZoon/MoonZoon" 80 | vdom = false 81 | ssr = false 82 | rendering = "html" 83 | architecture = "frp" 84 | outdated = true 85 | 86 | [[frontend]] 87 | name = "Silkenweb" 88 | crates-io = "silkenweb" 89 | repo = "https://github.com/silkenweb/silkenweb" 90 | vdom = false 91 | ssr = true 92 | rendering = "html" 93 | outdated = false 94 | architecture = "frp" 95 | 96 | [[frontend]] 97 | homepage = "https://chinedufn.github.io/percy/" 98 | name = "percy" 99 | crates-io = "percy-dom" 100 | repo = "https://github.com/chinedufn/percy" 101 | ssr = true 102 | vdom = true 103 | outdated = true 104 | rendering = "html" 105 | 106 | [[frontend]] 107 | name = "spair" 108 | crates-io = "spair" 109 | repo = "https://github.com/aclueless/spair" 110 | ssr = false 111 | vdom = false 112 | rendering = "html" 113 | outdated = true 114 | 115 | [[frontend]] 116 | homepage = "https://www.egui.rs/" 117 | name = "egui" 118 | crates-io = "egui" 119 | repo = "https://github.com/emilk/egui" 120 | ssr = false 121 | vdom = false 122 | rendering = "canvas" 123 | architecture = "imgui" 124 | 125 | [[frontend]] 126 | homepage = "https://iced.rs/" 127 | name = "Iced" 128 | crates-io = "iced" 129 | repo = "https://github.com/iced-rs/iced" 130 | ssr = false 131 | vdom = false 132 | rendering = "canvas" 133 | architecture = "tea" 134 | outdated = true 135 | 136 | [[frontend]] 137 | name = "Vizia" 138 | crates-io = "vizia" 139 | repo = "https://github.com/vizia/vizia" 140 | ssr = false 141 | vdom = false 142 | rendering = "canvas" 143 | 144 | [[frontend]] 145 | name = "frender" 146 | crates-io = "frender" 147 | homepage = "https://frender-rs.github.io/frender/" 148 | repo = "https://github.com/frender-rs/frender" 149 | vdom = true 150 | ssr = false 151 | outdated = true 152 | 153 | [[frontend]] 154 | outdated = true 155 | crates-io = "dodrio" 156 | name = "dodrio" 157 | repo = "https://github.com/fitzgen/dodrio" 158 | 159 | [[frontend]] 160 | outdated = true 161 | name = "draco" 162 | crates-io = "draco" 163 | repo = "https://github.com/utkarshkukreti/draco" 164 | 165 | [[frontend]] 166 | outdated = true 167 | name = "dumle" 168 | repo = "https://github.com/axelf4/dumle" 169 | 170 | [[frontend]] 171 | outdated = true 172 | name = "mika" 173 | repo = "https://gitlab.com/limira-rs/mika" 174 | crates-io = "mika" 175 | 176 | [[frontend]] 177 | outdated = true 178 | name = "ruukh" 179 | crates-io = "ruukh" 180 | repo = "https://github.com/csharad/ruukh" 181 | 182 | [[frontend]] 183 | outdated = true 184 | name = "smithy" 185 | crates-io = "smithy" 186 | repo = "https://github.com/rbalicki2/smithy" 187 | homepage = "https://www.smithy.rs/" 188 | 189 | [[frontend]] 190 | outdated = true 191 | name = "squark" 192 | crates-io = "squark" 193 | repo = "https://github.com/rail44/squark" 194 | 195 | [[frontend]] 196 | outdated = true 197 | name = "stdweb" 198 | crates-io = "stdweb" 199 | repo = "https://github.com/koute/stdweb" 200 | 201 | [[frontend]] 202 | outdated = true 203 | name = "willow" 204 | repo = "https://github.com/sindreij/willow" 205 | 206 | [[frontend]] 207 | name = "Leptos" 208 | repo = "https://github.com/leptos-rs/leptos" 209 | homepage = "https://leptos.dev/" 210 | crates-io = "leptos" 211 | vdom = false 212 | architecture = "frp" 213 | ssr = true 214 | rendering = "html" 215 | 216 | [[frontend]] 217 | name = "Kobold" 218 | crates-io = "kobold" 219 | repo = "https://github.com/maciejhirsz/kobold" 220 | vdom = false 221 | #ssr = true 222 | rendering = "html" 223 | architecture = "react" 224 | outdated = true 225 | 226 | ############ 227 | # Server # 228 | ############ 229 | 230 | [[server]] 231 | name = "actix-web" 232 | homepage = "https://actix.rs/" 233 | repo = "https://github.com/actix/actix-web" 234 | crates-io = "actix-web" 235 | https = true 236 | http2 = true 237 | base = "tokio" 238 | async = true 239 | client = false 240 | 241 | [[server]] 242 | name = "axum" 243 | repo = "https://github.com/tokio-rs/axum" 244 | crates-io = "axum" 245 | https = true 246 | http2 = true 247 | base = "hyper" 248 | async = true 249 | client = false 250 | 251 | [[server]] 252 | name = "gotham" 253 | homepage = "http://gotham.rs" 254 | repo = "https://github.com/gotham-rs/gotham" 255 | crates-io = "gotham" 256 | https = true 257 | http2 = false 258 | base = "hyper" 259 | async = true 260 | client = false 261 | outdated = true 262 | 263 | [[server]] 264 | name = "graphul" 265 | homepage = "https://graphul-rs.github.io/" 266 | repo = "https://github.com/graphul-rs/graphul" 267 | crates-io = "graphul" 268 | https = true 269 | http2 = true 270 | base = "hyper" 271 | async = true 272 | client = false 273 | outdated = true 274 | 275 | [[server]] 276 | name = "loco" 277 | repo = "https://github.com/loco-rs/loco" 278 | outdated = false 279 | crates-io = "loco-rs" 280 | https = true 281 | http2 = true 282 | base = "tokio" 283 | async = true 284 | client = false 285 | 286 | [[server]] 287 | name = "ntex" 288 | repo = "https://github.com/ntex-rs/ntex" 289 | crates-io = "ntex" 290 | https = true 291 | http2 = true 292 | base = "ntex-rt" 293 | async = true 294 | client = true 295 | 296 | [[server]] 297 | name = "rocket" 298 | homepage = "https://rocket.rs" 299 | repo = "https://github.com/SergioBenitez/rocket" 300 | crates-io = "rocket" 301 | https = true 302 | http2 = true 303 | base = "hyper" 304 | async = true 305 | client = false 306 | outdated = false 307 | 308 | [[server]] 309 | name = "Thruster" 310 | repo = "https://github.com/trezm/Thruster" 311 | crates-io = "thruster" 312 | https = true 313 | http2 = true 314 | base = "tokio (or hyper)" 315 | async = true 316 | client = false 317 | outdated = true 318 | 319 | [[server]] 320 | name = "Tide" 321 | repo = "https://github.com/rustasync/tide" 322 | crates-io = "tide" 323 | https = true 324 | http2 = false 325 | base = "async-std" 326 | async = true 327 | client = false 328 | outdated = true 329 | 330 | [[server]] 331 | name = "warp" 332 | repo = "https://github.com/seanmonstar/warp" 333 | crates-io = "warp" 334 | https = true 335 | http2 = true 336 | base = "hyper" 337 | async = true 338 | client = false 339 | outdated = true 340 | 341 | [[server]] 342 | name = "salvo" 343 | repo = "https://github.com/salvo-rs/salvo" 344 | crates-io = "salvo" 345 | https = true 346 | http2 = true 347 | base = "hyper" 348 | async = true 349 | client = false 350 | 351 | [[server]] 352 | name = "trillium" 353 | repo = "https://github.com/trillium-rs/trillium" 354 | crates-io = "trillium" 355 | homepage = "https://trillium.rs" 356 | https = true 357 | http2 = false 358 | base = "tokio" 359 | async = true 360 | client = false 361 | 362 | [[server]] 363 | name = "Poem" 364 | repo = "https://github.com/poem-web/poem" 365 | crates-io = "poem" 366 | https = true 367 | http2 = true 368 | base = "hyper" 369 | async = true 370 | client = false 371 | 372 | [[server]] 373 | name = "Viz" 374 | repo = "https://github.com/viz-rs/viz" 375 | homepage = "https://viz.rs" 376 | crates-io = "viz" 377 | https = true 378 | http2 = true 379 | base = "hyper" 380 | async = true 381 | client = false 382 | 383 | [[server]] 384 | name = "hyper" 385 | homepage = "http://hyper.rs/" 386 | repo = "https://github.com/hyperium/hyper" 387 | crates-io = "hyper" 388 | low-level = true 389 | outdated = false 390 | async = true 391 | http2 = true 392 | https = true 393 | client = true 394 | 395 | [[server]] 396 | name = "tiny-http" 397 | repo = "https://github.com/tiny-http/tiny-http" 398 | crates-io = "tiny_http" 399 | low-level = true 400 | async = false 401 | http2 = false 402 | https = true 403 | client = false 404 | outdated = true 405 | 406 | [[server]] 407 | name = "actix-http" 408 | homepage = "https://github.com/actix/actix-web/tree/master/actix-http" 409 | repo = "https://github.com/actix/actix-web" 410 | crates-io = "actix-http" 411 | low-level = true 412 | outdated = false 413 | async = true 414 | http2 = true 415 | https = true 416 | client = true 417 | 418 | [[server]] 419 | name = "zino" 420 | repo = "https://github.com/photino/zino" 421 | crates-io = "zino" 422 | outdated = false 423 | async = true 424 | 425 | [[server]] 426 | name = "wtx" 427 | repo = "https://github.com/c410-f3r/wtx" 428 | homepage = "https://c410-f3r.github.io/wtx/" 429 | crates-io = "wtx" 430 | async = true 431 | base = "wtx" 432 | http2 = true 433 | https = true 434 | client = true 435 | 436 | [[server]] 437 | name = "Ohkami" 438 | repo = "https://github.com/ohkami-rs/ohkami" 439 | crates-io = "ohkami" 440 | async = true 441 | base = "various runtimes" 442 | client = false 443 | 444 | [[server]] 445 | name = "civet" 446 | repo = "https://github.com/wycats/rust-civet" 447 | outdated = true 448 | crates-io = "civet" 449 | 450 | [[server]] 451 | name = "conduit" 452 | repo = "https://github.com/conduit-rust/conduit" 453 | outdated = true 454 | crates-io = "conduit" 455 | 456 | [[server]] 457 | name = "cargonaouts" 458 | repo = "https://github.com/cargonauts-rs/cargonauts" 459 | outdated = true 460 | crates-io = "cargonaouts" 461 | 462 | [[server]] 463 | name = "hydrogen" 464 | repo = "https://github.com/nathansizemore/hydrogen" 465 | outdated = true 466 | crates-io = "hydrogen" 467 | 468 | [[server]] 469 | name = "iron" 470 | repo = "https://github.com/iron/iron" 471 | outdated = true 472 | crates-io = "iron" 473 | 474 | [[server]] 475 | name = "kinglet" 476 | repo = "https://github.com/pyfisch/kinglet" 477 | outdated = true 478 | crates-io = "kinglet" 479 | 480 | [[server]] 481 | name = "nickel" 482 | repo = "https://github.com/nickel-org/nickel.rs" 483 | outdated = true 484 | crates-io = "nickel" 485 | 486 | [[server]] 487 | name = "rouille" 488 | repo = "https://github.com/tomaka/rouille" 489 | crates-io = "rouille" 490 | https = true 491 | async = false 492 | client = false 493 | outdated = true 494 | 495 | [[server]] 496 | name = "rustless" 497 | repo = "https://github.com/rustless/rustless" 498 | outdated = true 499 | crates-io = "rustless" 500 | 501 | [[server]] 502 | name = "rustful" 503 | repo = "https://github.com/Ogeon/rustful" 504 | outdated = true 505 | crates-io = "rustful" 506 | 507 | [[server]] 508 | name = "shio" 509 | repo = "https://github.com/mehcode/shio-rs" 510 | outdated = true 511 | crates-io = "shio" 512 | 513 | [[server]] 514 | name = "sappers" 515 | repo = "https://github.com/sappworks/sapper" 516 | outdated = true 517 | crates-io = "sappers" 518 | 519 | [[server]] 520 | name = "solicit" 521 | repo = "https://github.com/mlalic/solicit" 522 | outdated = true 523 | crates-io = "solicit" 524 | 525 | [[server]] 526 | name = "tower-web" 527 | repo = "https://github.com/carllerche/tower-web" 528 | outdated = true 529 | crates-io = "tower-web" 530 | 531 | [[server]] 532 | name = "tk-http" 533 | repo = "https://github.com/swindon-rs/tk-http" 534 | outdated = true 535 | crates-io = "tk-http" 536 | 537 | [[server]] 538 | name = "xitca-web" 539 | crates-io = "xitca-web" 540 | repo = "https://github.com/HFQR/xitca-web" 541 | low-level = true 542 | async = true 543 | 544 | ############# 545 | # Template # 546 | ############# 547 | 548 | [[template]] 549 | name = "sailfish" 550 | homepage = "https://rust-sailfish.github.io/sailfish/" 551 | repo = "https://github.com/rust-sailfish/sailfish" 552 | crates-io = "sailfish" 553 | 554 | [[template]] 555 | name = "tera" 556 | homepage = "https://keats.github.io/tera/" 557 | repo = "https://github.com/Keats/tera" 558 | crates-io = "tera" 559 | 560 | [[template]] 561 | name = "mustache" 562 | repo = "https://github.com/nickel-org/rust-mustache" 563 | crates-io = "mustache" 564 | outdated = true 565 | 566 | [[template]] 567 | name = "liquid" 568 | repo = "https://github.com/cobalt-org/liquid-rust" 569 | crates-io = "liquid" 570 | 571 | [[template]] 572 | name = "handlebars" 573 | repo = "https://github.com/sunng87/handlebars-rust" 574 | crates-io = "handlebars" 575 | 576 | [[template]] 577 | name = "horrorshow" 578 | repo = "https://github.com/Stebalien/horrorshow-rs" 579 | crates-io = "horrorshow" 580 | outdated = true 581 | 582 | [[template]] 583 | name = "maud" 584 | repo = "https://github.com/lfairy/maud" 585 | homepage = "https://lfairy.gitbooks.io/maud/content" 586 | crates-io = "maud" 587 | 588 | [[template]] 589 | name = "askama" 590 | repo = "https://github.com/askama-rs/askama" 591 | homepage = "https://askama.readthedocs.io/" 592 | crates-io = "askama" 593 | 594 | [[template]] 595 | name = "srtemplate" 596 | repo = "https://github.com/SergioRibera/srtemplate" 597 | homepage = "https://sergioribera.github.io/srtemplate" 598 | crates-io = "srtemplate" 599 | 600 | [[template]] 601 | name = "stpl" 602 | repo = "https://github.com/dpc/stpl" 603 | crates-io = "stpl" 604 | outdated = true 605 | 606 | [[template]] 607 | name = "ructe" 608 | repo = "https://github.com/kaj/ructe" 609 | crates-io = "ructe" 610 | 611 | [[template]] 612 | name = "typed-html" 613 | repo = "https://github.com/bodil/typed-html" 614 | crates-io = "typed-html" 615 | outdated = true 616 | 617 | [[template]] 618 | name = "minijinja" 619 | repo = "https://github.com/mitsuhiko/minijinja" 620 | crates-io = "minijinja" 621 | 622 | [[template]] 623 | name = "markup" 624 | repo = "https://github.com/utkarshkukreti/markup.rs" 625 | crates-io = "markup" 626 | outdated = true 627 | 628 | [[template]] 629 | name = "tinytemplate" 630 | repo = "https://github.com/bheisler/TinyTemplate" 631 | crates-io = "tinytemplate" 632 | outdated = true 633 | 634 | [[template]] 635 | name = "UIBeam" 636 | repo = "https://github.com/ohkami-rs/uibeam" 637 | crates-io = "uibeam" 638 | 639 | ############# 640 | # Websocket # 641 | ############# 642 | 643 | [[websocket]] 644 | name = "tungstenite" 645 | crates-io = "tungstenite" 646 | repo = "https://github.com/snapview/tungstenite-rs" 647 | server = true 648 | client = true 649 | async = true 650 | 651 | [[websocket]] 652 | name = "tokio-tungstenite" 653 | crates-io = "tokio-tungstenite" 654 | repo = "https://github.com/snapview/tokio-tungstenite" 655 | server = true 656 | client = true 657 | async = true 658 | 659 | [[websocket]] 660 | name = "actix-web" 661 | crates-io = "actix-web-actors" 662 | repo = "https://github.com/actix/actix-web" 663 | homepage = "https://actix.rs/docs/websockets/" 664 | server = true 665 | client = true 666 | async = true 667 | 668 | [[websocket]] 669 | name = "ws-rs" 670 | repo = "https://github.com/housleyjk/ws-rs" 671 | crates-io = "ws" 672 | server = true 673 | client = true 674 | async = true 675 | 676 | [[websocket]] 677 | name = "websocket" 678 | repo = "https://github.com/websockets-rs/rust-websocket" 679 | homepage = "https://websockets-rs.github.io/rust-websocket/" 680 | crates-io = "websocket" 681 | server = true 682 | client = true 683 | async = true 684 | outdated = true 685 | 686 | [[websocket]] 687 | name = "wtx" 688 | repo = "https://github.com/c410-f3r/wtx" 689 | homepage = "https://c410-f3r.github.io/wtx/" 690 | crates-io = "wtx" 691 | server = true 692 | client = true 693 | async = true 694 | 695 | [[websocket]] 696 | name = "mews" 697 | repo = "https://github.com/ohkami-rs/mews" 698 | crates-io = "mews" 699 | async = true 700 | server = true 701 | client = false 702 | 703 | [[websocket]] 704 | name = "Ohkami" 705 | repo = "https://github.com/ohkami-rs/ohkami" 706 | crates-io = "ohkami" 707 | async = true 708 | server = true 709 | client = false 710 | -------------------------------------------------------------------------------- /src/data.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | use serde::Deserialize; 3 | use std::{fs::File, io::Read}; 4 | use url::Url; 5 | 6 | pub fn read_data() -> Result { 7 | let mut file = File::open("data.toml")?; 8 | let mut toml_string = String::new(); 9 | file.read_to_string(&mut toml_string)?; 10 | let data = toml::from_str(&toml_string)?; 11 | Ok(data) 12 | } 13 | 14 | #[derive(Debug, Deserialize)] 15 | pub struct Data { 16 | pub frontend: Vec, 17 | pub template: Vec