[package]
edition = "2024"
rust-version = "1.97.1"
name = "arcature"
version = "0.1.0"
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Arcature: an opinionated full-stack Rust web framework. One package, batteries included."
homepage = "https://github.com/ArcatureLabs/Arcature"
documentation = "https://docs.rs/arcature"
readme = "README.md"
keywords = [
"web",
"framework",
"axum",
"inertia",
"arcature",
]
categories = [
"web-programming",
"web-programming::http-server",
"asynchronous",
"development-tools",
]
license = "Apache-2.0"
repository = "https://github.com/ArcatureLabs/Arcature"
[features]
api = [
"dep:http",
"dep:validator",
]
api-docs = [
"api",
"uag",
]
auth = [
"dep:argon2",
"dep:tower-sessions",
"dep:secrecy",
"dep:zeroize",
"dep:time",
]
cache = ["dep:redis"]
cli = [
"dep:clap",
"dep:tokio",
"dep:tokio-util",
"dep:notify",
"dev-proxy",
"templates",
"uag",
]
database = [
"dep:sqlx",
"dep:sea-orm",
"dep:sea-orm-migration",
"dep:chrono",
"dep:uuid",
]
db-mysql = [
"database",
"sqlx/mysql",
"sea-orm/sqlx-mysql",
"sea-orm-migration/sqlx-mysql",
]
db-postgres = [
"database",
"sqlx/postgres",
"sea-orm/sqlx-postgres",
"sea-orm-migration/sqlx-postgres",
]
db-sqlite = [
"database",
"sqlx/sqlite",
"sea-orm/sqlx-sqlite",
"sea-orm-migration/sqlx-sqlite",
]
default = [
"macros",
"dx",
"inertia",
"database",
"db-postgres",
"auth",
"validation",
"cache",
"storage-fs",
"mail",
"jobs",
"events",
"api",
"observe",
"pages",
"realtime",
"cli",
"templates",
]
dev-proxy = [
"dep:hyper",
"dep:hyper-util",
"dep:tokio",
]
dx = [
"macros",
"events",
"jobs",
]
events = []
fullstack = [
"macros",
"dx",
"inertia",
"database",
"db-postgres",
"auth",
"validation",
"cache",
"storage-fs",
"storage-s3",
"mail",
"jobs",
"events",
"api",
"observe",
"pages",
"realtime",
"cli",
"templates",
"dev-proxy",
"uag",
]
inertia = ["dep:http"]
jobs = [
"database",
"dep:tokio",
"dep:tokio-util",
]
macros = [
"dep:arcature-macros",
"dep:tokio",
"dep:tokio-util",
"dep:hyper",
"dep:hyper-util",
]
mail = [
"dep:lettre",
"dep:url",
"dep:percent-encoding",
]
oauth = [
"dep:oauth2",
"dep:url",
]
observe = [
"dep:tracing",
"dep:tracing-subscriber",
"dep:uuid",
]
otel = [
"observe",
"dep:opentelemetry",
"dep:opentelemetry_sdk",
"dep:opentelemetry-otlp",
"dep:tracing-opentelemetry",
]
pages = [
"dep:http",
"dep:tokio",
]
realtime = [
"dep:tokio",
"dep:futures",
"dep:bytes",
]
storage-fs = [
"dep:opendal",
"dep:bytes",
"dep:futures",
"opendal/services-fs",
]
storage-s3 = [
"storage-fs",
"opendal/services-s3",
"opendal/http-transport-reqwest",
"opendal/executors-tokio",
]
templates = []
test-kit = [
"macros",
"dep:http-body-util",
"dep:tower-sessions-memory-store",
]
uag = [
"dx",
"inertia",
]
validation = ["dep:validator"]
[lib]
name = "arcature"
path = "src/lib.rs"
[[bin]]
name = "arc"
path = "src/bin/arc.rs"
required-features = ["cli"]
[[test]]
name = "application"
path = "tests/application.rs"
[[test]]
name = "cli"
path = "tests/cli.rs"
[[test]]
name = "dev_supervisor"
path = "tests/dev_supervisor.rs"
[[test]]
name = "events"
path = "tests/events.rs"
[[test]]
name = "jobs"
path = "tests/jobs.rs"
[[test]]
name = "macros"
path = "tests/macros.rs"
[[test]]
name = "model"
path = "tests/model.rs"
[[test]]
name = "oauth"
path = "tests/oauth.rs"
[[test]]
name = "rate_limit"
path = "tests/rate_limit.rs"
[[test]]
name = "realtime"
path = "tests/realtime.rs"
[[test]]
name = "redirect"
path = "tests/redirect.rs"
[[test]]
name = "routes_dsl"
path = "tests/routes_dsl.rs"
[[test]]
name = "routing"
path = "tests/routing.rs"
[[test]]
name = "templates"
path = "tests/templates.rs"
[[test]]
name = "test_kit"
path = "tests/test_kit.rs"
[[test]]
name = "uag"
path = "tests/uag.rs"
[[bench]]
name = "inertia_render"
path = "benches/inertia_render.rs"
harness = false
required-features = ["inertia"]
[[bench]]
name = "pipeline"
path = "benches/pipeline.rs"
harness = false
required-features = [
"inertia",
"auth",
"observe",
]
[[bench]]
name = "rate_limit"
path = "benches/rate_limit.rs"
harness = false
[[bench]]
name = "uag"
path = "benches/uag.rs"
harness = false
required-features = ["uag"]
[dependencies.arcature-macros]
version = "=0.1.0"
optional = true
[dependencies.argon2]
version = "0.5.3"
features = [
"std",
"password-hash",
"rand",
]
optional = true
default-features = false
[dependencies.axum]
version = "0.8.9"
features = [
"tokio",
"http1",
"ws",
"json",
"form",
"query",
]
default-features = false
[dependencies.bytes]
version = "1.12.1"
optional = true
default-features = false
[dependencies.chrono]
version = "0.4.45"
features = ["serde"]
optional = true
default-features = false
[dependencies.clap]
version = "4.6.6"
features = [
"std",
"help",
"usage",
"error-context",
"suggestions",
]
optional = true
default-features = false
[dependencies.futures]
version = "0.3.33"
features = ["std"]
optional = true
default-features = false
[dependencies.getrandom]
version = "0.4.3"
default-features = false
[dependencies.http]
version = "1.3"
optional = true
default-features = false
[dependencies.http-body-util]
version = "0.1.5"
optional = true
default-features = false
[dependencies.hyper]
version = "1.11.0"
features = [
"http1",
"client",
]
optional = true
default-features = false
[dependencies.hyper-util]
version = "0.1.20"
features = ["tokio"]
optional = true
default-features = false
[dependencies.lettre]
version = "0.11.23"
features = [
"smtp-transport",
"builder",
"pool",
"tokio1",
"rustls",
"tokio1-rustls",
"aws-lc-rs",
"webpki-roots",
"hostname",
]
optional = true
default-features = false
[dependencies.notify]
version = "8.2.0"
features = ["macos_fsevent"]
optional = true
default-features = false
[dependencies.oauth2]
version = "5.0.0"
features = [
"reqwest",
"rustls-tls",
"timing-resistant-secret-traits",
]
optional = true
default-features = false
[dependencies.opendal]
version = "0.58.1"
optional = true
default-features = false
[dependencies.opentelemetry]
version = "0.32.0"
features = ["trace"]
optional = true
default-features = false
[dependencies.opentelemetry-otlp]
version = "0.32.0"
features = [
"trace",
"grpc-tonic",
]
optional = true
default-features = false
[dependencies.opentelemetry_sdk]
version = "0.32.1"
features = [
"trace",
"rt-tokio",
]
optional = true
default-features = false
[dependencies.percent-encoding]
version = "2.3"
optional = true
default-features = false
[dependencies.redis]
version = "1.5.0"
features = ["tokio-comp"]
optional = true
default-features = false
[dependencies.sea-orm]
version = "2.0.1"
features = [
"macros",
"runtime-tokio",
"with-json",
"with-uuid",
"with-chrono",
]
optional = true
default-features = false
[dependencies.sea-orm-migration]
version = "2.0.1"
features = ["runtime-tokio"]
optional = true
default-features = false
[dependencies.secrecy]
version = "0.10.3"
optional = true
default-features = false
[dependencies.serde]
version = "1.0.229"
features = ["derive"]
[dependencies.serde_json]
version = "1.0.145"
[dependencies.sqlx]
version = "0.9.0"
features = [
"runtime-tokio",
"tls-rustls-aws-lc-rs",
"macros",
"json",
"uuid",
"chrono",
]
optional = true
default-features = false
[dependencies.thiserror]
version = "2.0"
default-features = false
[dependencies.time]
version = "0.3.55"
optional = true
default-features = false
[dependencies.tokio]
version = "1.53.1"
features = [
"net",
"macros",
"rt-multi-thread",
"sync",
"time",
"io-util",
"signal",
"fs",
]
optional = true
default-features = false
[dependencies.tokio-util]
version = "0.7.19"
optional = true
default-features = false
[dependencies.tower]
version = "0.5.3"
default-features = false
[dependencies.tower-http]
version = "0.7.0"
features = [
"timeout",
"limit",
"fs",
"compression-gzip",
"compression-br",
"cors",
"set-header",
"catch-panic",
]
default-features = false
[dependencies.tower-sessions]
version = "0.15.0"
features = [
"axum-core",
"signed",
]
optional = true
default-features = false
[dependencies.tower-sessions-memory-store]
version = "0.15.0"
optional = true
default-features = false
[dependencies.tracing]
version = "0.1.44"
features = [
"std",
"attributes",
]
optional = true
default-features = false
[dependencies.tracing-opentelemetry]
version = "0.33.0"
optional = true
default-features = false
[dependencies.tracing-subscriber]
version = "0.3.23"
features = [
"registry",
"fmt",
]
optional = true
default-features = false
[dependencies.url]
version = "2.5"
optional = true
default-features = false
[dependencies.uuid]
version = "1.24.0"
features = [
"v4",
"serde",
]
optional = true
default-features = false
[dependencies.validator]
version = "0.21.0"
features = ["derive"]
optional = true
default-features = false
[dependencies.zeroize]
version = "1.9.0"
features = ["alloc"]
optional = true
default-features = false
[dev-dependencies.criterion]
version = "0.8.2"
features = [
"cargo_bench_support",
"async_tokio",
]
default-features = false
[dev-dependencies.reqwest]
version = "0.13.4"
features = [
"rustls",
"json",
]
default-features = false
[dev-dependencies.serde_urlencoded]
version = "0.7.1"
default-features = false
[dev-dependencies.tempfile]
version = "3.23.0"
default-features = false
[dev-dependencies.tokio]
version = "1.53.1"
features = [
"net",
"macros",
"rt-multi-thread",
"sync",
"time",
"io-util",
"signal",
]
default-features = false
[dev-dependencies.tokio-tungstenite]
version = "0.30.0"
default-features = false
[dev-dependencies.tower-sessions-memory-store]
version = "0.15.0"
default-features = false
[lints.rust]
unsafe_code = "forbid"
[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
check-cfg = ['cfg(feature, values("storage"))']