Skip to content

Wulf/create-rust-app

main
Switch branches/tags
Code

Create Rust App

License: MIT OR Apache-2.0

Set up a modern rust+react web app by running one command.

create-rust-app.dev

Requirements

  • tsync
    • cargo install tsync
  • diesel_cli
  • Stable rust
    • rustup install stable (nightly is fine too)

Install

cargo install create-rust-app_cli

Quick start

create-rust-app my-todo-app
# .. select backend framework, plugins, etc.
# Code-gen resources for your project
cd ./my-todo-app
create-rust-app
# .. select resource type / properties

Features

1. Project creation

$ create-rust-app <project_name>
  • Run frontend & backend with a single command: cargo fullstack
  • Rust backend
    • One of the following frameworks: actix-web, poem or let us know which one you want to use!
    • Database migrations (using diesel.rs)
    • Sending mail
    • PostgreSQL (but you can easily switch to another one!)
    • ViteJS (blazing fast frontend compile speeds)
    • SSR templating with an option to include bundles that are automatically code-split
      • The /views folder contains all templates
      • The /frontend/bundles folder contains all the bundles which can be included in your views via {{bundle(name="MyBundle.tsx")}}
    • Automatically route to your single page application(s)
      • Use create_rust_app::render_single_page_application("/app","your_spa.html")
  • React frontend (or install your own framework!)
    • Typescript, with backend type definition generation (via tsync)
    • Routing (via react-router-dom)
    • Typed react-query hooks generation ($ cd my_project && create-rust-app, then select "Generate react-query hooks")

Available Plugins

  • Authentication (+ Authorization) plugin

    • Add JWT token-based auth with a simple command
    • Session management: restoration of previous session, revoking of refresh tokens
    • Credentials management/recovery
    • Email validation / activation flow
    • Adds frontend UI + react hooks
    • Adds auth service, and user / session models
    • Block your endpoints via Auth guard
    • Follows OWASP security best practices
    • RBAC permissions out of the box (assign roles and permissions to users)
  • Container plugin

    • Dockerfile to containerize your rust app into a single image
  • Development plugin

    • View your database via the admin portal at localhost:3000/admin (editing functionality coming soon™)
    • A "devbox" on the frontend indicates when the backend is compiling or when the database is not reachable
    • Moreover, the devbox displays when migrations are pending + includes a "run migrations" button
  • Storage plugin

    • Adds Storage extractor which allows you to upload/download files from an S3-compatible object store
    • Seamlessly add single or multiple attachments to your models using Attachment::*!
    • Here are some examples:
      • Adding an avatar to a user in your users table:
      let s3_key = Attachment::attach("avatar", "users", user_id, AttachmentData {
          file_name: "image.png",
          data: bytes
      })?;
      • Getting the url for the attachment
      let storage: Storage // retreive this via the appropriate extractor in your frameowrk of choice
      let url = storage.download_uri(s3_key)?;
      (note: see Attachment::* and Storage::* for more functionality!)
  • GraphQL plugin

    • Adds all the boilerplate necessary to expose GraphQL
    • Requires the auth plugin: authentication and authorization setup out-of-the-box
    • Find a graphql playground at localhost:3000/graphql

2. Code-gen to reduce boilerplate

$ cd my_project && create-rust-app
  • CRUD code-gen to reduce boilerplate
    • Scaffolds the db model, endpoints service file, and hooks it up in your /api!
  • react-query hooks generation for frontend
    • Generates a hook for each handler function defined in the services/ folder
    • Edit generated hooks afterwards -- they won't be regenerated unless you delete (or rename) the hook!

Walkthrough

Gif

Contributing

Questions and comments are welcome in the issues section!

If you're experiencing slow compilation time, make sure there isn't any bloat in the template files (look for node_modules or typescript / parcel caches and delete them).