A "Hello, world!" template of a Rust binary crate for the ESP-IDF framework.

Overview

Rust on ESP-IDF "Hello, World" template

A "Hello, world!" template of a Rust binary crate for the ESP-IDF framework.

This is the crate you get when running cargo new, but augmented with extra configuration so that it does build for the ESP32[XX] with ESP-IDF and (by default) with STD support.

Or if you rather

CI

Prerequisites

Install Rustup

If you don't have rustup installed yet, follow the instructions on the rustup.rs site

Install Rust & Clang - for Xtensa MCUs (ESP32, ESP32-S2 and ESP32-S3)

  • Install the Rust Espressif compiler toolchain and the Espressif LLVM Clang toolchain
  • This is necessary, because support for the Xtensa architecture (ESP32 / ESP32-S2 / ESP32-S3) is not upstreamed in LLVM yet
  • Make sure that you DON'T have a system Clang installed as well, because even if you have the Espressif one first on your $PATH, Bindgen will still pick the system one
    • A workaround that does not require uninstalling the system Clang is to do export LIBCLANG_PATH= prior to continuing the build process

Install Rust & Clang - for RiscV32 MCUs (ESP32-C3)

  • You can target the ESP32-C3 with the Espressif toolchains just fine, but this MCU is also supported by the stock compilers
  • So alternatively - just use the stock nightly Rust compiler, and a recent, stock Clang (as in Clang 11+)

To install the nightly Rust compiler toolchain:

rustup install nightly
rustup component add rust-src --toolchain nightly

Installing a recent Clang compiler is OS-specific. The Clang Getting Started page contains useful guidelines.

Install Python3

You need a Python 3.7 or later installed on your machine. Install it from the package distro of your OS, or download and install from the official Python site.

Install Cargo Sub-Commands

cargo install cargo-generate
cargo install ldproxy
cargo install espflash
cargo install espmonitor

Generate the project

cargo generate --vcs none --git https://github.com/ivmarkov/esp-idf-template cargo

Build

To build using the default PlatformIO builder just use:

cd <your-project-name>
cargo build
  • Replace with the name of the generated project

To build using the ESP-IDF native builder, use:

cargo build --features native

Flash

In the root of the generated project:

espflash /dev/ttyUSB0 target/[xtensa-esp32-espidf|xtensa-esp32s2-espidf|xtensa-esp32s3-espidf|riscv32imc-esp-espidf]/debug/<your-project-name>
  • Replace dev/ttyUSB0 above with the USB port where you've connected the board
  • Replace with the name of the generated project

Monitor

espmonitor /dev/ttyUSB0
  • Replace dev/ttyUSB0 above with the USB port where you've connected the board

The monitor should output more or less the following:

Opening /dev/tty.usbserial-0001 with speed 115200
Resetting device... done
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0048,len:12
ho 0 tail 12 room 4
load:0x3fff0054,len:4800
load:0x40078000,len:17448
load:0x4007c428,len:4840
entry 0x4007c6a0
I (178) cpu_start: Pro cpu up.
I (178) cpu_start: Starting app cpu, entry point is 0x4008115c
I (0) cpu_start: App cpu up.
I (193) cpu_start: Pro cpu start user code
I (193) cpu_start: cpu freq: 160000000
I (193) cpu_start: Application information:
I (197) cpu_start: Project name:     esp-idf
I (202) cpu_start: App version:      f08dcd7
I (207) cpu_start: Compile time:     Oct 23 2021 14:48:03
I (213) cpu_start: ELF file SHA256:  0000000000000000...
I (219) cpu_start: ESP-IDF:          4.3.0
I (224) heap_init: Initializing. RAM available for dynamic allocation:
I (231) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (237) heap_init: At 3FFB3498 len 0002CB68 (178 KiB): DRAM
I (243) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (250) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (256) heap_init: At 4008C538 len 00013AC8 (78 KiB): IRAM
I (263) spi_flash: detected chip: generic
I (267) spi_flash: flash io: dio
I (272) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
Hello, world!
Comments
  • Error `psram: Not a valid or known package id: 6` on ESP32-PICO-MINI-02

    Error `psram: Not a valid or known package id: 6` on ESP32-PICO-MINI-02

    I have an Adafruit ESP32 Feather V2 with an ESP32-PICO-MINI-02 and am getting an error / boot loop when trying to run the example:

    ets Jul 29 2019 12:21:46
    rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 271414342, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:2
    load:0x3fff0048,len:12
    ho 0 tail 12 room 4
    load:0x3fff0054,len:4800
    load:0x40078000,len:17448
    0x40078000 - __udivmoddi4
        at ??:??
    load:0x4007c428,len:4840
    0x4007c428 - __udivmoddi4
        at ??:??
    entry 0x4007c6a0
    0x4007c6a0 - __udivmoddi4
        at ??:??
    E (201) psram: Not a valid or known package id: 6
    abort() was called at PC 0x400791d7
    0x400791d7 - __udivmoddi4
        at ??:??
    

    So far I have

    • Set the target to xtensa-esp32-espidf to match the μC on the module
    • Added --use-stub to the runner setting to get it to upload at all
    • Updated the esp-idf-sys and embuild versions to their current version
    • Set ESP_IDF_VERSION to release/v5.0 (incl. setting the rustflags and doing a cargo clean)
    • Added the following to sdkconfig.defaults
      CONFIG_SPIRAM=y
      CONFIG_SPIRAM_TYPE=SPIRAM_TYPE_AUTO # since the documentation is unclear, I also tried CONFIG_SPIRAM_TYPE_AUTO=y
      CONFIG_SPIRAM_CACHE_WORKAROUND=y
      

    All to no avail, as I keep getting that error. The board itself (still) works fine with Arduino

    opened by l0calh05t 0
  • sdkconfig.defaults ignored

    sdkconfig.defaults ignored

    Hi. I'm having issues changing the SDK configuration. I'd like to disable logging in the bootloader and HAL as well as a few other things, which can be done by adding the following lines to sdkconfig.defaults:

    CONFIG_BOOTLOADER_LOG_LEVEL=0
    CONFIG_BOOTLOADER_WDT_ENABLE=n
    CONFIG_HAL_LOG_LEVEL=0
    CONFIG_LOG_DEFAULT_LEVEL=0
    CONFIG_ESP_SYSTEM_PANIC=ESP_SYSTEM_PANIC_PRINT_HALT
    

    After adding these lines to sdkconfig.defaults and running cargo build (with or without --release) I noticed that none of these changes were applied. My ESP32 was still displaying boot logs and calling panic!() would make the chip reboot instead of halting as specified above.

    I tried:

    • Adding ESP_IDF_SDKCONFIG_DEFAULTS = "sdkconfig.defaults" to the [env] section in .cargo/config.toml
    • Adding ESP_IDF_SDKCONFIG = "sdkconfig.defaults" to the [env] section in .cargo/config.toml
    • cargo clean; cargo build

    None of these helped. Is there extra configuration needed to make this work?

    ESP-IDF version: release/v4.4 Board: Generic ESP32 dev board Project generated using: cargo generate https://github.com/esp-rs/esp-idf-template cargo STD support: yes, Dev container support: no

    opened by br0kenpixel 0
  • Rust-analyzer errors when opening a project generated with the cargo template

    Rust-analyzer errors when opening a project generated with the cargo template

    Rust-analyzer generates this error when opening a project:

    LSP[rust_analyzer] rust-analyzer failed to load workspace: Failed to read Cargo metadata from Cargo.toml file /home/jtcf/rustworks/esp-test/Cargo.toml, Some(Version { major: 1, minor: 66, patch: 0 }): Fail
    ed to run `"cargo" "metadata" "--format-version" "1" "--manifest-path" "/home/jtcf/rustworks/esp-test/Cargo.toml" "--filter-platform" "xtensa-esp32-espidf"`: `cargo metadata` exited with an error: error: f
    ailed to run `rustc` to learn about target-specific information                                                                                                                                              
    Caused by:                                                                                                                                                                                                   
      process didn't exit successfully: `rustc - --crate-name ___ --print=file-names --cfg espidf_time64 --target xtensa-esp32-espidf --crate-type bin --crate-type rlib --crate-type dylib --crate-type cdylib -
    -crate-type staticlib --crate-type proc-macro --print=sysroot --print=cfg` (exit status: 1)                                                                                                                  
      --- stderr                                                                                                                                                                                                 
      error: Error loading target specification: Could not find specification for target "xtensa-esp32-espidf". Run `rustc --print target-list` for a list of built-in targets
    

    This is in neovim

    opened by JohnTheCoolingFan 1
  • cmake template: remove panic_immediate_abort for new idf versions

    cmake template: remove panic_immediate_abort for new idf versions

    build-std-features=panic_immediate_abort causes panics to not print their error messages which is a bad developer experience. Similar to the Cargo template, do not set this flag for newer espidf versions.

    opened by benhansen-io 3
  • Compiling hello world - esp-idf-sys - stderr Build configuration: BuildConfig

    Compiling hello world - esp-idf-sys - stderr Build configuration: BuildConfig

    Hey,

    I am quite excited to get this to work. I have had quite a bit of trouble.

    What I am trying to do is to get something compiled and onto my ESP32.

    Might be more related to esp-idf-sys.

    Here is one of the things that I have tried to do.

    ➜ Git cargo generate --vcs none --git https://github.com/esp-rs/esp-idf-template cargo 🤷 Project Name : project 🔧 Destination: /home/richard/Git/project ... 🔧 Generating template ... ? 🤷 Configure project to use Dev Containers (VS Code, GitHub Codespaces and Gitpod)? (beware: Dev Containers not av✔ 🤷 Configure project to use Dev Containers (VS Code, GitHub Codespaces and Gitpod)? (beware: Dev Containers not available for esp-idf v4.3.2) · true ✔ 🤷 MCU · esp32 ✔ 🤷 ESP-IDF native build version (v4.3.2 = previous stable, v4.4 = stable, mainline = UNSTABLE) · v4.4 ✔ 🤷 STD support · true [ 1/24] Done: .cargo/config.toml [ 2/24] Done: .cargo [ 3/24] Done: .devcontainer/Dockerfile [ 4/24] Done: .devcontainer/devcontainer.json [ 5/24] Done: .devcontainer [ 6/24] Done: .dockerignore [ 7/24] Done: .gitignore [ 8/24] Done: .gitpod.Dockerfile [ 9/24] Done: .gitpod.yml [10/24] Done: .vscode/launch.json [11/24] Done: .vscode/tasks.json [12/24] Done: .vscode [13/24] Done: Cargo.toml [14/24] Done: build.rs [15/24] Done: docs/README.md [16/24] Done: docs [17/24] Done: rust-toolchain.toml [18/24] Done: scripts/build.sh [19/24] Done: scripts/flash.sh [20/24] Done: scripts/run-wokwi.sh [21/24] Done: scripts [22/24] Done: sdkconfig.defaults [23/24] Done: src/main.rs [24/24] Done: src 🔧 Moving generated files into: /home/richard/Git/project... ✨ Done! New project created /home/richard/Git/project ➜ Git cd /home/richard/Git/project

    ➜ esp-idf git:(release/v4.4) ✗ git checkout release/v4.4 M components/bt/host/nimble/nimble M components/esp_phy/lib M components/esp_wifi/lib M components/esptool_py/esptool M components/ieee802154/lib M components/lwip/lwip M components/mbedtls/mbedtls M components/mqtt/esp-mqtt M components/openthread/lib M components/openthread/openthread M components/tinyusb/tinyusb M examples/peripherals/secure_element/atecc608_ecdsa/components/esp-cryptoauthlib Already on 'release/v4.4' Your branch is up to date with 'origin/release/v4.4'. ➜ esp-idf git:(release/v4.4) ✗ pwd /home/richard/esp/esp-idf ➜ esp-idf git:(release/v4.4) ✗ git submodule update --init --recursive Submodule path 'components/bt/host/nimble/nimble': checked out 'dac3a2a0f54589b10a4cff2a99526804747089df' Submodule path 'components/esp_phy/lib': checked out 'ff0d771b8e33e320e11634567ee53b9cd78e6be1' Submodule path 'components/esp_wifi/lib': checked out '85d6197b8f4271f51a409c0cd7e293ae2694145c' Submodule path 'components/ieee802154/lib': checked out 'f7b5e8059a3bb6f321e79ac3bf2aa4d2a9b93326' Submodule path 'components/lwip/lwip': checked out '76303df2386902e0d7873be4217f1d9d1b50f982' Submodule path 'components/mbedtls/mbedtls': checked out '89da85968417ce4a163b7275cb22f159995c271d' Submodule path 'components/mqtt/esp-mqtt': checked out '27eb4726067465c5c67d4ecdca5ddccd26f02580' Submodule path 'components/openthread/lib': checked out '9a8d34d8f698cad2c9468468b473e26a3dda51b9' Submodule path 'components/openthread/openthread': checked out 'c36c0e77a2465355bcf13bd7dc718d8c9aa6ff64' Submodule path 'components/tinyusb/tinyusb': checked out 'c4badd394eda18199c0196ed0be1e2d635f0a5f6' Submodule path 'examples/peripherals/secure_element/atecc608_ecdsa/components/esp-cryptoauthlib': checked out '36d0642e66ff5b1c7a291873f24c498ca6ffedef'

    ➜ project ./scripts/build.sh
    Compiling esp-idf-sys v0.31.7 The following warnings were emitted during compilation:

    warning: Ignoring configuration setting ESP_IDF_VERSION (Tag v5.0): custom esp-idf repository detected via $IDF_PATH

    error: failed to run custom build command for esp-idf-sys v0.31.7

    Caused by: process didn't exit successfully: /home/richard/Git/project/target/release/build/esp-idf-sys-590e438e9fb453c2/build-script-build (exit status: 101) --- stdout cargo:rerun-if-env-changed=ESP_IDF_TOOLS_INSTALL_DIR cargo:rerun-if-env-changed=ESP_IDF_SDKCONFIG cargo:rerun-if-env-changed=ESP_IDF_SDKCONFIG_DEFAULTS cargo:rerun-if-env-changed=MCU cargo:rerun-if-env-changed=ESP_IDF_SYS_ROOT_CRATE cargo:rerun-if-env-changed=ESP_IDF_VERSION cargo:rerun-if-env-changed=ESP_IDF_REPOSITORY cargo:rerun-if-env-changed=ESP_IDF_CMAKE_GENERATOR cargo:rerun-if-env-changed=IDF_PATH cargo:rerun-if-env-changed=ESP_IDF_COMPONENTS The following Python requirements are not satisfied: pyparsing>=2.0.3,<2.4.0 gdbgui==0.13.2.0 python-socketio<5 jinja2<3.1 # See https://github.com/espressif/esp-idf/issues/8760 itsdangerous<2.1 kconfiglib==13.7.1 construct==2.10.54 To install the missing packages, please run "/home/richard/esp/esp-idf/install.sh" Diagnostic information: IDF_PYTHON_ENV_PATH: /home/richard/.espressif/python_env/idf5.0_py3.8_env Python interpreter used: /home/richard/.espressif/python_env/idf5.0_py3.8_env/bin/python cargo:warning=Ignoring configuration setting ESP_IDF_VERSION (Tag v5.0): custom esp-idf repository detected via $IDF_PATH PATH=/home/richard/Git/project/.embuild/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32-elf/bin:/home/richard/Git/project/.embuild/espressif/tools/cmake/3.23.1/bin:/home/richard/Git/project/.embuild/espressif/tools/ninja/1.10.2/:$PATH Current system platform: linux-amd64 Skipping [email protected] (already installed) Skipping [email protected] (already installed) Skipping [email protected] (already installed) Skipping [email protected] (already installed) PATH=/home/richard/Git/project/.embuild/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32-elf/bin:/home/richard/Git/project/.embuild/espressif/tools/cmake/3.23.1/bin:/home/richard/Git/project/.embuild/espressif/tools/ninja/1.10.2/:$PATH cargo:rerun-if-changed=/home/richard/Git/project/sdkconfig.defaults CMAKE_PREFIX_PATH_xtensa-esp32-espidf = None CMAKE_PREFIX_PATH_xtensa_esp32_espidf = None TARGET_CMAKE_PREFIX_PATH = None CMAKE_PREFIX_PATH = None CMAKE_xtensa-esp32-espidf = None CMAKE_xtensa_esp32_espidf = None TARGET_CMAKE = None CMAKE = None running: "cmake" "/home/richard/Git/project/target/xtensa-esp32-espidf/release/build/esp-idf-sys-beed0b193df20ab5/out" "-G" "Ninja" "-DCMAKE_TOOLCHAIN_FILE=/home/richard/esp/esp-idf/tools/cmake/toolchain-esp32.cmake" "-DCMAKE_BUILD_TYPE=" "-DPYTHON=/home/richard/.espressif/python_env/idf5.0_py3.8_env/bin/python" "-DCMAKE_INSTALL_PREFIX=/home/richard/Git/project/target/xtensa-esp32-espidf/release/build/esp-idf-sys-beed0b193df20ab5/out" "-DCMAKE_C_FLAGS= -mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections" "-DCMAKE_CXX_FLAGS= -mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections" "-DCMAKE_ASM_FLAGS= -mlongcalls -ffunction-sections -fdata-sections" -- Checking Python dependencies... The following Python requirements are not satisfied: pyparsing>=2.0.3,<2.4.0 gdbgui==0.13.2.0 python-socketio<5 jinja2<3.1 # See https://github.com/espressif/esp-idf/issues/8760 itsdangerous<2.1 kconfiglib==13.7.1 construct==2.10.54 To install the missing packages, please run "/home/richard/esp/esp-idf/install.sh" Diagnostic information: IDF_PYTHON_ENV_PATH: /home/richard/.espressif/python_env/idf5.0_py3.8_env Python interpreter used: /home/richard/.espressif/python_env/idf5.0_py3.8_env/bin/python -- Configuring incomplete, errors occurred! See also "/home/richard/Git/project/target/xtensa-esp32-espidf/release/build/esp-idf-sys-beed0b193df20ab5/out/build/CMakeFiles/CMakeOutput.log".

    --- stderr Build configuration: BuildConfig { esp_idf_tools_install_dir: None, esp_idf_sdkconfig: None, esp_idf_sdkconfig_defaults: None, mcu: None, native: NativeConfig { esp_idf_version: Some( Tag( "v5.0", ), ), esp_idf_repository: None, esp_idf_cmake_generator: None, idf_path: Some( "/home/richard/esp/esp-idf", ), extra_components: [], esp_idf_components: None, }, esp_idf_sys_root_crate: None, } Using custom user-supplied esp-idf repository at '/home/richard/esp/esp-idf' (detected from env variable IDF_PATH) Using esp-idf v4.4.1 at '/home/richard/esp/esp-idf' CMake Error at /home/richard/esp/esp-idf/tools/cmake/build.cmake:287 (message): Some Python dependencies must be installed. Check above message for details. Call Stack (most recent call first): /home/richard/esp/esp-idf/tools/cmake/build.cmake:416 (__build_check_python) CMakeLists.txt:14 (idf_build_process)

    thread 'main' panicked at ' command did not execute successfully, got: exit status: 1

    build script failed, must exit now', /home/richard/.cargo/registry/src/github.com-1ecc6299db9ec823/cmake-0.1.48/src/lib.rs:975:5 stack backtrace: 0: 0x5592d7191ccc - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h1791ff2e87a4a949 1: 0x5592d71b059e - core::fmt::write::hd3936cb33cf524d4 2: 0x5592d716ddd1 - std::io::Write::write_fmt::hdd80ac53afad4740 3: 0x5592d7173375 - std::panicking::default_hook::{{closure}}::ha1fd9d555c583f5d 4: 0x5592d7172ffa - std::panicking::default_hook::hc37a1a17cf5ce086 5: 0x5592d717387c - std::panicking::rust_panic_with_hook::h818296db12e1c172 6: 0x5592d7192bb7 - std::panicking::begin_panic_handler::{{closure}}::hcb2048160d2bd008 7: 0x5592d7191f64 - std::sys_common::backtrace::__rust_end_short_backtrace::h8106bfaf0dca55fa 8: 0x5592d7173542 - rust_begin_unwind 9: 0x5592d698fbe3 - core::panicking::panic_fmt::ha8187868327e1820 10: 0x5592d6c1e9fd - cmake::fail::hf8ea13342af4ecc2 11: 0x5592d6c1e43e - cmake::run::hdc82ba4860964bbd 12: 0x5592d6c1b01c - cmake::Config::build::h309f8b6a3bf11c84 13: 0x5592d69ec84d - build_script_build::native::cargo_driver::build::h0928d80ad948051d 14: 0x5592d69e0dfc - build_script_build::native::build::h9ed16d7a30efc811 15: 0x5592d69b7492 - build_script_build::main::h662f52b46fdc2986 16: 0x5592d6a04d06 - core::ops::function::FnOnce::call_once::h8ab18b3a7e586893 17: 0x5592d69b1e59 - std::sys_common::backtrace::__rust_begin_short_backtrace::h51be1fe5382073af 18: 0x5592d69e326c - std::rt::lang_start::{{closure}}::hb40aa8284739eabc 19: 0x5592d716d751 - std::rt::lang_start_internal::h4f59c50d5a45d217 20: 0x5592d69e3251 - std::rt::lang_start::h35ae57f21736ef18 21: 0x5592d69ba423 - main 22: 0x7f4495708083 - __libc_start_main at /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:308:16 23: 0x5592d698fe8e - _start 24: 0x0 -

    opened by carlin54 3
Owner
Ivan Markov
Ivan Markov
This is a template repo for eframe, a framework for writing apps using egui.

eframe template This is a template repo for eframe, a framework for writing apps using egui. The goal is for this to be the simplest way to get starte

Viet Dinh 0 Feb 5, 2022
Yarte stands for Yet Another Rust Template Engine

Should we start to worry? bytes-buf feature can produce SIGILL. avx and sse flags are in almost all cpus of x86 and x86_64 architectures. More details

Juan Aguilar 249 Dec 19, 2022
A template engine for Rust based on Jinja2/Django

Tera Tera is a template engine inspired by Jinja2 and the Django template language. <title>{% block title %}{% endblock title %}</title> <ul> {% for u

Vincent Prouillet 2.5k Jan 1, 2023
A flexible template engine for Rust

Rustache Rustache is a Rust implementation of the Mustache spec. Documentation The different Mustache tags are documented at the mustache(5) man page.

rustache 208 May 10, 2022
A minimalist Rust WebAssembly project template

MiniWASM - A minimalist Rust WebAssembly project template This is a minimal Rust-powered WebAssembly application template. It was designed to showcase

Emil Loer 160 Jul 26, 2022
A template for a Rust-powered static-page Try Online interface

rust-tio-template A template for a Rust-powered static-page Try Online interface What is included This is an example setup that enables all of the fol

null 2 Dec 13, 2021
MiniJinja is a powerful but minimal dependency template engine for Rust

MiniJinja: a powerful template engine for Rust with minimal dependencies MiniJinja is a powerful but minimal dependency template engine for Rust which

Armin Ronacher 686 Jan 5, 2023
A template for creating services in Rust using Axum and Prisma.

A template for creating services in Rust using Axum and Prisma. This uses the super cool Prisma Rust Client.

Aaron Leopold 6 Oct 19, 2022
Compiler for Jade-like template language to cito.js-based virtual dom

Marafet A very experimental DSL for creating (mostly) single page applications in HTML. It's mostly a Jade-like (or Haml-like) templating language wit

Paul Colomiets 11 Jun 25, 2020
A nice template for NEAR repos

Template for a NEAR project If you're looking for a no-std version of this template, go here. Contains: a setup script Cargo.toml setup with simulatio

Thor 12 Dec 28, 2021
Yew Tauri Desktop App Template

Yew Tauri Desktop App Template This is Template App for Desktop App. Run Develop $ cargo tauri dev Build App $ cargo tauri build Setup yew setup Using

usa 16 Oct 16, 2022
Template for Cargo based SysY compiler projects.

基于 Cargo 的 SysY 编译器项目模板 该仓库中存放了一个基于 Cargo 的 SysY 编译器项目的模板, 你可以在该模板的基础上进行进一步的开发. 该仓库中的 Rust 代码实现仅作为演示, 不代表你的编译器必须以此方式实现. 如你需要使用该模板, 建议你删掉所有 Rust 源文件, 仅

PKU Compiler Course 1 Nov 1, 2021
finch - a super fast and efficient template rendering engine for node.js

finch A super fast and efficient template rendering engine for node.js, inspired by Handlebars. Usage Finch is very simple to use: Register a template

null 1 Nov 2, 2021
Balsa is a delightfully simple HTML template engine

?? balsa Balsa is a delightfully simple HTML template engine. It is designed to be used in user interfaces such as a CMS where a user needs to be able

Tyler Lafayette 1 Jan 19, 2022
Bevy GitHub CI Template

Bevy GitHub CI Template This repo show how to setup CI on a github project for Bevy. It creates two workflows: CI Release CI Definition: .github/workf

MiniaczQ 2 Feb 7, 2022
Rust templating with Handlebars

handlebars-rust Handlebars templating language implemented in Rust and for Rust. Handlebars-rust is the template engine that renders the official Rust

Ning Sun 922 Dec 27, 2022
:pencil: Compile-time HTML templates for Rust

maud Documentation (source) • API reference • Change log Maud is an HTML template engine for Rust. It's implemented as a macro, html!, which compiles

Chris Wong 1.4k Jan 1, 2023
A macro-based html builder for rust

Horrorshow A macro-based html templating library, compatible with stable rust (currently requires rust >= 1.37). Features This crate will degrade grac

Steven Allen 267 Dec 11, 2022
Rust Compiled Templates with static-file handling

Rust Compiled Templates — ructe This is my attempt at writing a HTML template system for Rust. Some inspiration comes from the scala template system u

Rasmus Kaj 337 Jan 8, 2023