Set up a modern rust+react web app by running one command.
tsync
cargo install tsync
diesel_cli
- Instructions here
- Stable rust
rustup install stable
(nightly is fine too)
cargo install create-rust-app_cli
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
$ 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, SQLite 3.35+ support
- 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")}}
- The
- Automatically route to your single page application(s)
- Use
create_rust_app::render_single_page_application("/app","your_spa.html")
- Use
- One of the following frameworks:
- 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")
- Typescript, with backend type definition generation (via
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
- View your database via the admin portal at
-
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
(note: seelet storage: Storage // retreive this via the appropriate extractor in your frameowrk of choice let url = storage.download_uri(s3_key)?;
Attachment::*
andStorage::*
for more functionality!)
- Adds
-
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
$ 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
!
- Scaffolds the db model, endpoints service file, and hooks it up in your
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!
- Generates a hook for each handler function defined in the
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).