{"id":45621414,"url":"https://github.com/summer-rs/summer-rs","last_synced_at":"2026-02-28T02:01:01.994Z","repository":{"id":248381587,"uuid":"806015479","full_name":"summer-rs/summer-rs","owner":"summer-rs","description":"🍃spring-rs is a application framework written in rust inspired by java's spring-boot","archived":false,"fork":false,"pushed_at":"2026-02-21T07:24:57.000Z","size":3216,"stargazers_count":925,"open_issues_count":28,"forks_count":55,"subscribers_count":11,"default_branch":"master","last_synced_at":"2026-02-25T00:36:41.142Z","etag":null,"topics":["axum","cron-job","kafka","macros","microservice","opentelemetry","procedural-macro","redis","rust","sea-orm","spring-boot","spring-rs","sqlx","stream","web"],"latest_commit_sha":null,"homepage":"https://spring-rs.github.io/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/summer-rs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-MIT","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-26T06:02:17.000Z","updated_at":"2026-02-21T13:33:18.000Z","dependencies_parsed_at":"2026-01-30T16:03:25.356Z","dependency_job_id":null,"html_url":"https://github.com/summer-rs/summer-rs","commit_stats":{"total_commits":327,"total_committers":3,"mean_commits":109.0,"dds":"0.033639143730886834","last_synced_commit":"947b3fd632ebb6ef8c8e65c13f4252fdfbfe2074"},"previous_names":["holmofy/autumn-boot","autumn-rs/autumn-rs","spring-rs/autumn-rs","summer-rs/summer-rs","spring-rs/spring-rs"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/summer-rs/summer-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/summer-rs%2Fsummer-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/summer-rs%2Fsummer-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/summer-rs%2Fsummer-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/summer-rs%2Fsummer-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/summer-rs","download_url":"https://codeload.github.com/summer-rs/summer-rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/summer-rs%2Fsummer-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29922702,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axum","cron-job","kafka","macros","microservice","opentelemetry","procedural-macro","redis","rust","sea-orm","spring-boot","spring-rs","sqlx","stream","web"],"created_at":"2026-02-23T19:00:23.622Z","updated_at":"2026-02-28T02:01:01.988Z","avatar_url":"https://github.com/summer-rs.png","language":"Rust","funding_links":[],"categories":["Libraries","\u003ca name=\"Rust\"\u003e\u003c/a\u003eRust","Rust"],"sub_categories":["Web programming"],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/spring-rs/spring-rs/refs/heads/master/docs/static/logo-rust.svg\" alt=\"Logo\" width=\"200\"/\u003e\n    \u003ch3\u003espring-rs is application framework written in Rust, inspired by Java's SpringBoot\u003c/h3\u003e\n    \u003cp\u003eEnglish ｜ \u003ca href=\"https://spring-rs.github.io/zh/docs/getting-started/introduction/\"\u003e中文\u003c/a\u003e\u003c/p\u003e\n    \u003cp\u003e\n        \u003ca href=\"https://crates.io/crates/spring\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/spring.svg\" alt=\"crates.io\"/\u003e\u003c/a\u003e \u003ca href=\"https://docs.rs/spring\"\u003e\u003cimg src=\"https://docs.rs/spring/badge.svg\" alt=\"Documentation\"/\u003e\u003c/a\u003e \u003cimg src=\"https://img.shields.io/crates/l/spring\" alt=\"Documentation\"/\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n\u003cb\u003espring-rs\u003c/b\u003e is an application framework that emphasizes convention over configuration, inspired by Java's SpringBoot. \u003cb\u003espring-rs\u003c/b\u003e provides an easily extensible plug-in system for integrating excellent projects in the Rust community, such as axum, sqlx, sea-orm, etc.\n\nCompared with SpringBoot in java, spring-rs has higher performance and lower memory usage, allowing you to completely get rid of the bloated JVM and travel light.\n\n## Features\n\n* ⚡️ High performance: Benefiting from the awesome rust language, \u003cb\u003espring-rs\u003c/b\u003e has the ultimate performance comparable to C/C++\n* 🛡️ High security: Compared to C/C++, the Rust language used by \u003cb\u003espring-rs\u003c/b\u003e provides memory safety and thread safety.\n* 🔨 Lightweight: The core code of spring-rs does not exceed 5,000 lines, and the binary size of the release version packaged in rust is also small.\n* 🔧 Easy to use: \u003cb\u003espring-rs\u003c/b\u003e provides a clear and concise API and optional Procedural Macros to simplify development.\n* 🔌 Highly extensible: \u003cb\u003espring-rs\u003c/b\u003e uses a highly extensible plug-in model, and users can customize plug-ins to extend program capabilities.\n* ⚙️ Highly configurable: \u003cb\u003espring-rs\u003c/b\u003e uses toml to configure applications and plug-ins to improve application flexibility.\n\n## Example\n\n**web**\n\n```rust,no_run\nuse spring::{auto_config, App};\nuse spring_sqlx::{\n    sqlx::{self, Row},\n    ConnectPool, SqlxPlugin\n};\nuse spring_web::{get, route};\nuse spring_web::{\n    error::Result, extractor::{Path, Component}, handler::TypeRouter, axum::response::IntoResponse, Router,\n    WebConfigurator, WebPlugin,\n};\nuse anyhow::Context;\n\n#[auto_config(WebConfigurator)]\n#[tokio::main]\nasync fn main() {\n    App::new()\n        .add_plugin(SqlxPlugin)\n        .add_plugin(WebPlugin)\n        .run()\n        .await\n}\n\n#[get(\"/\")]\nasync fn hello_world() -\u003e impl IntoResponse {\n    \"hello world\"\n}\n\n#[route(\"/hello/{name}\", method = \"GET\", method = \"POST\")]\nasync fn hello(Path(name): Path\u003cString\u003e) -\u003e impl IntoResponse {\n    format!(\"hello {name}\")\n}\n\n#[get(\"/version\")]\nasync fn sqlx_request_handler(Component(pool): Component\u003cConnectPool\u003e) -\u003e Result\u003cString\u003e {\n    let version = sqlx::query(\"select version() as version\")\n        .fetch_one(\u0026pool)\n        .await\n        .context(\"sqlx query failed\")?\n        .get(\"version\");\n    Ok(version)\n}\n```\n\n**job**\n\n```rust,ignore\nuse anyhow::Context;\nuse spring::{auto_config, App};\nuse spring_job::{cron, fix_delay, fix_rate};\nuse spring_job::{extractor::Component, JobConfigurator, JobPlugin};\nuse spring_sqlx::{\n    sqlx::{self, Row},\n    ConnectPool, SqlxPlugin,\n};\nuse std::time::{Duration, SystemTime};\n\n#[auto_config(JobConfigurator)]\n#[tokio::main]\nasync fn main() {\n    App::new()\n        .add_plugin(JobPlugin)\n        .add_plugin(SqlxPlugin)\n        .run()\n        .await;\n\n    tokio::time::sleep(Duration::from_secs(100)).await;\n}\n\n#[cron(\"1/10 * * * * *\")]\nasync fn cron_job(Component(db): Component\u003cConnectPool\u003e) {\n    let time: String = sqlx::query(\"select TO_CHAR(now(),'YYYY-MM-DD HH24:MI:SS') as time\")\n        .fetch_one(\u0026db)\n        .await\n        .context(\"query failed\")\n        .unwrap()\n        .get(\"time\");\n    println!(\"cron scheduled: {:?}\", time)\n}\n\n#[fix_delay(5)]\nasync fn fix_delay_job() {\n    let now = SystemTime::now();\n    let datetime: sqlx::types::chrono::DateTime\u003csqlx::types::chrono::Local\u003e = now.into();\n    let formatted_time = datetime.format(\"%Y-%m-%d %H:%M:%S\");\n    println!(\"fix delay scheduled: {}\", formatted_time)\n}\n\n#[fix_rate(5)]\nasync fn fix_rate_job() {\n    tokio::time::sleep(Duration::from_secs(10)).await;\n    let now = SystemTime::now();\n    let datetime: sqlx::types::chrono::DateTime\u003csqlx::types::chrono::Local\u003e = now.into();\n    let formatted_time = datetime.format(\"%Y-%m-%d %H:%M:%S\");\n    println!(\"fix rate scheduled: {}\", formatted_time)\n}\n```\n\n## component macros\n\nAdd dependencies to your `Cargo.toml`:\n\n```toml\n[dependencies]\nspring = \"0.4\"\ntokio = { version = \"1\", features = [\"full\"] }\n```\n\n**Simple component registration with `#[component]` macro:**\n\n```rust,no_run\nuse spring::component;\nuse spring::config::Configurable;\nuse spring::extractor::Config;\nuse spring::plugin::ComponentRegistry;\nuse spring::App;\nuse serde::Deserialize;\n\n// Define configuration\n#[derive(Clone, Configurable, Deserialize)]\n#[config_prefix = \"app\"]\nstruct AppConfig {\n    name: String,\n}\n\n// Define component\n#[derive(Clone)]\nstruct AppService {\n    config: AppConfig,\n}\n\n// Use #[component] macro for automatic registration\n#[component]\nfn app_service(Config(config): Config\u003cAppConfig\u003e) -\u003e AppService {\n    AppService { config }\n}\n\n#[tokio::main]\nasync fn main() {\n    // Components are automatically registered\n    let app = App::new().build().await.unwrap();\n    \n    // Get registered component\n    let service = app.get_component::\u003cAppService\u003e().unwrap();\n    println!(\"App name: {}\", service.config.name);\n}\n```\n\nThe `#[component]` macro eliminates boilerplate code - no need to manually implement the Plugin trait! [Learn more →](https://spring-rs.github.io/docs/getting-started/component/)\n\n## Supported plugins\n\n| Plugin                | Crate                                                                                                                                                                      | Integrated With                                                               | Description                                      |\n| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------ |\n| `spring-web`            | [![spring-web](https://img.shields.io/crates/v/spring-web.svg)](https://spring-rs.github.io/docs/plugins/spring-web/)                                         | [`axum`](https://github.com/tokio-rs/axum)                                  | Web framework based on Axum                      |\n| `spring-sqlx`           | [![spring-sqlx](https://img.shields.io/crates/v/spring-sqlx.svg)](https://spring-rs.github.io/docs/plugins/spring-sqlx/)                                     | [`sqlx`](https://github.com/launchbadge/sqlx)                               | Async SQL access                                 |\n| `spring-postgres`       | [![spring-postgres](https://img.shields.io/crates/v/spring-postgres.svg)](https://spring-rs.github.io/docs/plugins/spring-postgres/)                     | [`rust-postgres`](https://github.com/sfackler/rust-postgres)                | PostgreSQL client integration                   |\n| `spring-sea-orm`        | [![spring-sea-orm](https://img.shields.io/crates/v/spring-sea-orm.svg)](https://spring-rs.github.io/docs/plugins/spring-sea-orm/)                         | [`sea-orm`](https://www.sea-ql.org/SeaORM/)                                 | ORM support                                      |\n| `spring-redis`          | [![spring-redis](https://img.shields.io/crates/v/spring-redis.svg)](https://spring-rs.github.io/docs/plugins/spring-redis/)                                 | [`redis`](https://github.com/redis-rs/redis-rs)                             | Redis integration                                |\n| `spring-mail`           | [![spring-mail](https://img.shields.io/crates/v/spring-mail.svg)](https://spring-rs.github.io/docs/plugins/spring-mail/)                                     | [`lettre`](https://github.com/lettre/lettre)                                | Email sending                                    |\n| `spring-job`            | [![spring-job](https://img.shields.io/crates/v/spring-job.svg)](https://spring-rs.github.io/docs/plugins/spring-job/)                                         | [`tokio-cron-scheduler`](https://github.com/mvniekerk/tokio-cron-scheduler) | Scheduled jobs / Cron                            |\n| `spring-stream`         | [![spring-stream](https://img.shields.io/crates/v/spring-stream.svg)](https://spring-rs.github.io/docs/plugins/spring-stream/)                             | [`sea-streamer`](https://github.com/SeaQL/sea-streamer)                     | Stream processing (Redis Streams / Kafka)       |\n| `spring-opentelemetry`  | [![spring-opentelemetry](https://img.shields.io/crates/v/spring-opentelemetry.svg)](https://spring-rs.github.io/docs/plugins/spring-opentelemetry/) | [`opentelemetry`](https://github.com/open-telemetry/opentelemetry-rust)     | Logging, metrics, and distributed tracing        |\n| `spring-grpc`           | [![spring-grpc](https://img.shields.io/crates/v/spring-grpc.svg)](https://spring-rs.github.io/docs/plugins/spring-grpc/)                                     | [`tonic`](https://github.com/hyperium/tonic)                                | gRPC services and clients                        |\n| `spring-opendal`        | [![spring-opendal](https://img.shields.io/crates/v/spring-opendal.svg)](https://spring-rs.github.io/docs/plugins/spring-opendal/)                         | [`opendal`](https://github.com/apache/opendal)                              | Unified object storage and data access           |\n| `spring-apalis`        | [![spring-apalis](https://img.shields.io/crates/v/spring-apalis.svg)](https://spring-rs.github.io/docs/plugins/spring-apalis/)                         | [`apalis`](https://github.com/apalis-dev/apalis)                              | High-performance background processing library |\n| `spring-sa-token`      | [![spring-sa-token](https://img.shields.io/crates/v/spring-sa-token.svg)](https://spring-rs.github.io/docs/plugins/spring-sa-token/)               | [`sa-token-rust`](https://github.com/click33/sa-token-rust)                   | Sa-Token authentication and authorization      |\n\n## Ecosystem\n\n* ![spring-sqlx-migration-plugin](https://img.shields.io/crates/v/spring-sqlx-migration-plugin.svg) [`spring-sqlx-migration-plugin`](https://github.com/Phosphorus-M/spring-sqlx-migration-plugin)\n* [![Version](https://img.shields.io/visual-studio-marketplace/v/holmofy.spring-rs)](https://marketplace.visualstudio.com/items?itemName=holmofy.spring-rs)[`spring-lsp`](https://github.com/spring-rs/spring-lsp) - IDE support for VSCode / compatible editor with LSP\n* [![JetBrains Plugin](https://img.shields.io/badge/JetBrains-Plugin-orange)](https://plugins.jetbrains.com/plugin/30040-spring-rs) [`intellij-spring-rs`](https://github.com/ouywm/intellij-spring-rs) - IDE support for RustRover / IntelliJ IDEA\n\n[more\u003e\u003e](https://crates.io/crates/spring/reverse_dependencies)\n\n## Project showcase\n\n* [Raline](https://github.com/ralinejs/raline)\n* [AutoWDS](https://github.com/AutoWDS/autowds-backend)\n\n## Contribution\n\nWe also welcome community experts to contribute their own plugins. [Contributing →](https://github.com/spring-rs/spring-rs)\n\n## Help\n\nClick here to view common problems encountered when using `spring-rs` [Help →](https://spring-rs.github.io/docs/help/faq/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsummer-rs%2Fsummer-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsummer-rs%2Fsummer-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsummer-rs%2Fsummer-rs/lists"}