Starting project template for Rust, Axum, Sqlite backend and Svelte frontend. Simple Single-Page-App (SPA) example. Does not use SvelteKit.
Work in progress (new features coming), but should be usable as a starting point.
cargo install cargo-generatecargo generate AndreiBozantan/svelte-axum-project -n <your-project-name>--template optionInstall the following:
Change current directory in the project folder:
cd <your-project-name> - to go to the project root folder.Initialization - run once before starting in dev mode:
npm run dev:initRun the project in dev mode, with hot reloading:
npm run devBy default, the backend will be available at http://localhost:3000 and the frontend at http://localhost:5173.
In dev mode, the vite config is set to proxy the backend API requests to the backend server, so you can access the API at http://localhost:5173/.
Execute npm run build in the project root folder, to build the frontend and backend in release mode. The npm script will build the frontend before the backend, as the frontend static files are embedded in the backend binary.
Optionally, you can execute npm run clean before the build, to remove all previous build artifacts, including the node_modules folders, so that the build starts from a clean state.
After running the clean command, you have to run npm run dev:init once, to reinitialize the project before running in dev mode.
./backendRun cargo run from inside the repo root folder to start the backend server independently from the frontend.
The backend can be configured using TOML files in the ./config directory:
default.toml - Default configurationdevelopment.toml - Development-specific overridesproduction.toml - Production configuration exampleYou can run the database migrations by using the migrate command in the backend.
It will run all pending migrations from the migrations directory, or the embedded migrations if the directory does not exist.
./your-app migrate run # run this in production
or
cargo sqlx migrate run # run this in development
When deploying to production, do not copy the migrations directory to the production server. You should use the embedded migrations instead, which are included in the binary.
./frontendRun npm run dev from inside the ./frontend directory to start serving the frontend.
sqlx, see pr#2cargo-embed-file see pr#1axum 0.8.4This template includes Google OAuth2 SSO integration. To set it up:
http://localhost:3000/auth/oauth/google/callback⚠️ IMPORTANT SECURITY NOTE: Never commit OAuth secrets to git!
Create local.toml (git-ignored) based on default.toml in the ./backend/config directory and add your Google OAuth credentials.
npm run devOAuth2 users are stored in the same users table with:
sso_provider: "google"sso_id: Google user IDpassword_hash: NULL (since OAuth users don't have passwords)The OAuth flow generates the same JWT tokens as regular login, so all existing authentication middleware works seamlessly.