[{"url":"https://api.github.com/repos/loco-rs/loco/releases/362967746","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/362967746/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/362967746/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v1.0.1","id":362967746,"author":{"login":"jondot","id":83390,"node_id":"MDQ6VXNlcjgzMzkw","avatar_url":"https://avatars.githubusercontent.com/u/83390?v=4","gravatar_id":"","url":"https://api.github.com/users/jondot","html_url":"https://github.com/jondot","followers_url":"https://api.github.com/users/jondot/followers","following_url":"https://api.github.com/users/jondot/following{/other_user}","gists_url":"https://api.github.com/users/jondot/gists{/gist_id}","starred_url":"https://api.github.com/users/jondot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jondot/subscriptions","organizations_url":"https://api.github.com/users/jondot/orgs","repos_url":"https://api.github.com/users/jondot/repos","events_url":"https://api.github.com/users/jondot/events{/privacy}","received_events_url":"https://api.github.com/users/jondot/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84VonLC","tag_name":"v1.0.1","target_commitish":"master","name":"v1.0.1","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-31T09:32:24Z","updated_at":"2026-07-31T09:37:07Z","published_at":"2026-07-31T09:37:07Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v1.0.1","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v1.0.1","body":"A documentation and CLI-ergonomics patch. No behavior changes to the framework runtime.\n\n### Fixed\n\n- **`generate scaffold`/`controller` no longer error on the old `--api` flag.** The 1.0 adaptive-generator rebuild removed the `--api`/`--html`/`--htmx` (and `-k/--kind`) flags — scaffold now auto-detects headless vs. clientside from `frontend/`, and controllers are always JSON API controllers — but the docs (including the *Your first app* tutorial) still showed `--api`, so copy-pasting them failed with `error: unexpected argument '--api' found`. The generators now accept the old flags for compatibility: `--api` is a no-op (it's the headless default) and `--html`/`--htmx` return a clear message pointing at the React SPA frontend that replaced server-rendered views. (#1790)\n- **Docs resync.** Removed every reference to the removed scaffold/controller kind flags and the deleted `ScaffoldKind` enum / `mappings.json` across the tutorials, how-to guides, and CLI/generators reference; corrected the field-type reference to describe `loco-gen/src/column.rs` (including that `array:int` is now a 64-bit `BigInt` array, consistent with the scalar `int` → `i64` change).\n\n**Full Changelog**: https://github.com/loco-rs/loco/blob/release/1.0.0/CHANGELOG.md\n","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/362967746/reactions","total_count":4,"+1":0,"-1":0,"laugh":0,"hooray":4,"confused":0,"heart":0,"rocket":0,"eyes":0}},{"url":"https://api.github.com/repos/loco-rs/loco/releases/361656377","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/361656377/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/361656377/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v1.0.0","id":361656377,"author":{"login":"jondot","id":83390,"node_id":"MDQ6VXNlcjgzMzkw","avatar_url":"https://avatars.githubusercontent.com/u/83390?v=4","gravatar_id":"","url":"https://api.github.com/users/jondot","html_url":"https://github.com/jondot","followers_url":"https://api.github.com/users/jondot/followers","following_url":"https://api.github.com/users/jondot/following{/other_user}","gists_url":"https://api.github.com/users/jondot/gists{/gist_id}","starred_url":"https://api.github.com/users/jondot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jondot/subscriptions","organizations_url":"https://api.github.com/users/jondot/orgs","repos_url":"https://api.github.com/users/jondot/repos","events_url":"https://api.github.com/users/jondot/events{/privacy}","received_events_url":"https://api.github.com/users/jondot/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84VjnA5","tag_name":"v1.0.0","target_commitish":"master","name":"v1.0.0 — Loco is stable","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-29T09:47:41Z","updated_at":"2026-07-29T10:07:34Z","published_at":"2026-07-29T10:07:34Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v1.0.0","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v1.0.0","body":"## 1.0.0 - 2026-07-25\n\n1.0.0 is the first stable Loco release — a single, intentionally-breaking\nmilestone. Its headline is the move to **Sea-ORM 2.0**, alongside first-class\nLLM/agent support, priority queues, a broad dependency modernization, and a deep\nhardening pass across the queue, storage, config, error, remote-IP, and\nmiddleware subsystems. Follow the step-by-step\n[0.16 → 1.0 upgrade guide](https://loco.rs/docs/extras/upgrades/).\n\n### Breaking Changes\n\n- **Sea-ORM 2.0 + sqlx 0.9.** Bump `sea-orm`/`sea-orm-migration` to **`2.0`**\n  (app + `migration` crate), direct `sqlx` to `0.9`, update the Sea-ORM CLI, and\n  regenerate entities. Raw-`Statement` calls gain a `_raw` suffix; runtime SQL\n  strings need `AssertSqlSafe`. MSRV is **1.94** (sea-orm 2.0.0 declares it).\n  (Adopted from the SeaQL fork and\n  [#1698](https://github.com/loco-rs/loco/pull/1698).)\n- **Generated primary/foreign keys are now 64-bit (BIGINT / `i64`).** Also the\n  `int`/`unsigned` field types generate 64-bit columns. Only affects newly\n  generated code; existing tables are untouched.\n- **Priority queues — Redis backend change.** The Redis worker moved from Lists\n  to Sorted Sets (ZSET) to support priority; **drain existing Redis queues before\n  upgrading**. Postgres/SQLite auto-migrate a `priority` column (no action).\n  ([#1693](https://github.com/loco-rs/loco/pull/1693))\n- **`Worker::perform_later()` returns the job ID** (`Result<String>`), and\n  `Queue::enqueue()` returns `Result<Option<String>>`. Existing\n  `perform_later(...).await?;` keeps working. ([#1624](https://github.com/loco-rs/loco/pull/1624), fixes [#1623](https://github.com/loco-rs/loco/issues/1623))\n- **`PageResponse<T>` exposes `meta: PagerMeta`** instead of flat\n  `total_pages`/`total_items` (also carries `page`/`page_size`). ([#1685](https://github.com/loco-rs/loco/pull/1685), fixes [#1683](https://github.com/loco-rs/loco/issues/1683))\n- **View engine:** use `engines::TeraView::build_with_post_process(...)` instead\n  of `TeraView::build()?.post_process(...)` in `after_routes`.\n- **Dependency majors:** `thiserror` 1→2, `tower` 0.4→0.5, `heck`→0.5,\n  `byte-unit` 4→5, `ipnetwork` 0.20→0.21, `strum`→0.27, `redis` 0.31→1,\n  `bb8-redis`→0.26, `opendal` 0.54→0.57; `serde_yaml`→`serde_yaml_ng`.\n  Transitive for most apps.\n- Removed the dead `loco-cli` crate (superseded by `loco-new`, the published\n  `loco` binary).\n- **`ExtraDbInitializer` removed; use `MultiDbInitializer`.** The\n  single-extra-connection initializer (`initializers.extra_db`, which layered a\n  bare `Extension<DatabaseConnection>`) is gone. Use `MultiDbInitializer` with a\n  one-entry `initializers.multi_db` map instead, and extract the connection with\n  `Extension<MultiDb>` + `multi_db.get(\"<name>\")`. This collapses two\n  near-identical initializers into one named-connections abstraction.\n- **`AppContext` is now `#[non_exhaustive]`.** Construct it with\n  `AppContext::builder(environment, db, config)` (or `builder(environment,\n  config)` without the `with-db` feature) followed by optional\n  `.queue_provider(..)`/`.mailer(..)`/`.storage(..)`/`.cache(..)`/`.shared_store(..)`\n  and `.build()`. Direct struct-literal construction and exhaustive pattern\n  matches on `AppContext` from outside the crate no longer compile; field\n  access (`ctx.db`, `ctx.config`, `State`/`FromRef` extraction) is unchanged.\n  This makes future context fields non-breaking to add.\n- **Storage `MirrorStrategy` and `BackupStrategy` merged into `ReplicatedStrategy`.**\n  The two strategies were the same primary-plus-secondaries replication engine;\n  they are now one `storage::strategies::replicated::ReplicatedStrategy` with a\n  single `FailurePolicy` enum. Migrate: `MirrorStrategy::new(p, s, MirrorAll)` →\n  `ReplicatedStrategy::mirror(p, s, FailurePolicy::FailIfAny)`;\n  `BackupStrategy::new(p, s, BackupAll)` → `ReplicatedStrategy::backup(p, s,\n  FailurePolicy::FailIfAny)`. Old `FailureMode` maps: `AllowMirrorFailure`/\n  `AllowBackupFailure` → `AllowAll`, `AtLeastOneFailure` → `AllowSingleFailure`,\n  `CountFailure(n)` → `FailAtFailures(n)`. Secondary writes for the former\n  backup strategy now run concurrently (previously sequential); the collected\n  errors and failure decision are unchanged.\n- **Local storage driver no longer defaults its root to `/`.**\n  `storage::drivers::local::new()` previously rooted the filesystem store at\n  `/`, so any key — including one derived from user input — resolved against the\n  whole disk (e.g. downloading key `etc/passwd` read `/etc/passwd`). It now roots\n  at the current working directory. Apps that relied on absolute-path keys should\n  switch to `local::new_with_prefix(\"/your/root\")` to opt back into an explicit\n  absolute root.\n- **Background queue reworked into a `QueueProvider` adapter interface.** The\n  `bgworker::Queue` enum (`Postgres`/`Sqlite`/`Redis`/`None`) is now a newtype\n  over `Arc<dyn QueueProvider>`, so backends are pluggable (implement\n  `QueueProvider` and wrap with `Queue::from_provider`). All existing methods\n  (`enqueue`, `register`, `run`, `ping`, `cancel_jobs`, `clear_by_status`,\n  `requeue`, …) keep the same signatures and behavior. Only two source-level\n  changes affect callers: construct a no-op queue with `Queue::empty()` instead\n  of `Queue::None`, and code that pattern-matched the enum variants (e.g.\n  `Queue::Postgres(pool, ..)` to reach the raw pool) no longer compiles — use the\n  provider methods instead.\n- **Fallback middleware defaults to `404`.** When the built-in fallback is\n  enabled without an explicit `code`, it now returns `404 Not Found` (matching\n  its docs and the bundled not-found page) instead of `200 OK`. Apps that relied\n  on the enabled fallback returning `200` must set `code: 200` explicitly. The\n  file-based fallback is unaffected (`ServeFile` reports its own status).\n- **`{env}.local.yaml` now deep-merges over `{env}.yaml`.** Previously the first\n  existing file won and the other was ignored, so a `.local.yaml` had to restate\n  the whole config. Both files are now layered with local precedence: mappings\n  merge recursively; scalars and sequences in local replace the base value\n  (sequences are not concatenated). Base keys now persist unless explicitly\n  overridden.\n- **More accurate HTTP status codes for errors.** `IntoResponse for Error`\n  previously collapsed ~28 of 35 variants to `500`. `Model(EntityNotFound)` now\n  returns `404`, `Model(EntityAlreadyExists)` returns `409`, model validation\n  and form-body rejections return `4xx` (matching JSON rejections) instead of\n  `500`. Genuinely-internal errors still return a generic `500`. Handlers that\n  asserted on the old `500`s will observe the corrected codes.\n- **`JWT::algorithm()` restricted to the HMAC family.** It now takes a new\n  `loco_rs::auth::jwt::JWTAlgorithm` enum (`HS256`/`HS384`/`HS512`) instead of\n  `jsonwebtoken::Algorithm`. Asymmetric algorithms — which could never work with\n  Loco's shared base64 secret and silently produced broken tokens — are no longer\n  representable.\n- **`remote_ip` middleware rebuilt on `axum-client-ip`; `trusted_proxies`\n  removed.** Previously this middleware walked `X-Forwarded-For` right-to-left,\n  skipping any address in a configurable `trusted_proxies` CIDR list (or a\n  built-in RFC-1918 + loopback list), so it could see through a chain of one or\n  more trusted proxies. It now trusts exactly **one** configured source\n  (`source: ClientIpSource`, default `RightmostXForwardedFor`) and does **no**\n  CIDR filtering — for the default it takes the last comma-separated value of the\n  last `X-Forwarded-For` header verbatim, private or not. Single reverse-proxy\n  deployments are unaffected. **Multi-hop topologies (CDN → LB → ingress) must\n  now configure their innermost hop to set the client IP (e.g. nginx\n  `set_real_ip_from`/`real_ip_recursive`), or point `source` at a provider header\n  (`CfConnectingIp`, `CloudFrontViewerAddress`, `XRealIp`, `ConnectInfo`, …).**\n  Note: an old config's `trusted_proxies:` key is silently ignored (unknown\n  field), so review `remote_ip` before upgrading — this is a silent\n  security-relevant behavior change, not a load error. The `RemoteIP` extractor\n  and its `Display` output are unchanged.\n- **`auth_jwt` feature renamed to `auth`.** Update `features = [\"auth_jwt\"]` → `[\"auth\"]`\n  (it gates JWT auth and the `ApiToken` extractor, as before).\n- **Background-queue features collapsed.** `bg_pg`/`bg_sqlt` → `worker`\n  (Postgres+SQLite; free once `sqlx` is compiled), `bg_redis` → `worker_redis`\n  (adds `dep:redis`). `default` now has `worker` (not Redis). A Redis queue needs\n  `worker_redis`; the queue backend is selected at runtime by `queue.kind`.\n- **Mailer `Template::new(dir)` now returns `Result`** (call `Template::new(dir)?`).\n  Email templates render through a full Tera instance so they support inheritance\n  and shared templates. Standard usage via `Mailer::mail_template` is unchanged.\n  ([#1694](https://github.com/loco-rs/loco/pull/1694))\n- **`Vars::cli_arg` returns `Result<&str>`** (was `Result<&String>`). Callers that\n  relied on `&String` (e.g. `.clone()` into a `String`) should use `.to_owned()`.\n  ([#1732](https://github.com/loco-rs/loco/pull/1732))\n\n### Added\n\n- **First-class LLM / agent support.** Root `AGENTS.md` teaches agents to build\n  Loco apps; `llms.txt` / `llms-full.txt` are served from the site\n  (llmstxt.org). Every `loco new` app ships an app-level `AGENTS.md`.\n- **Priority queues** with `Worker::perform_later_with_priority(...)`; mailer\n  jobs default to priority `100`. ([#1693](https://github.com/loco-rs/loco/pull/1693))\n- **Mailer implicit TLS (SMTPS / port 465)** via `mailer.smtp.tls`. ([#1774](https://github.com/loco-rs/loco/pull/1774), fixes [#1773](https://github.com/loco-rs/loco/issues/1773))\n- **Run the scheduler without a worker** — `--scheduler` flag +\n  `StartMode::ServerAndScheduler`/`WorkerAndScheduler`. ([#1742](https://github.com/loco-rs/loco/pull/1742), fixes [#1737](https://github.com/loco-rs/loco/issues/1737))\n- Email headers support in the mailer ([#1700](https://github.com/loco-rs/loco/pull/1700)).\n- **Multi-recipient emails.** `Mailer::mail_multi` / `mail_template_multi` and the\n  `MultiEmail` / `MultiArgs` types send one email to multiple To/CC/BCC\n  recipients (processed by a dedicated `MultiMailerWorker`). ([#1764](https://github.com/loco-rs/loco/pull/1764))\n- **Email template inheritance & shared templates.** Mailer templates support\n  Tera `{% extends %}` / `{% block %}` and can share a common layout via\n  `Mailer::mail_template_with_shared` / `Template::new_with_shared`. `loco generate\n  mailer` now scaffolds a `src/mailers/shared/` base layout that the welcome\n  template extends. ([#1694](https://github.com/loco-rs/loco/pull/1694))\n- \"Create user\" task ([#1670](https://github.com/loco-rs/loco/pull/1670)).\n- `UuidUniqWithDefault` and `UuidWithDefault` types ([#1642](https://github.com/loco-rs/loco/pull/1642)).\n- Allow overriding a secure header ([#1659](https://github.com/loco-rs/loco/pull/1659)).\n- **`Mailer::deliver_now` / `mail_template_now` for synchronous sends.**\n  Complements `Mailer::mail`/`mail_template` (which enqueue via the background\n  worker, like Rails `deliver_later`) with an inline send that bypasses the\n  queue (Rails `deliver_now`).\n- **`MiddlewareStackExt` for surgical middleware-stack edits.** Inside\n  `Hooks::middlewares`, tweak the default stack instead of rebuilding it:\n  `stack.insert_before(\"cors\", ..)`, `.insert_after(..)`, `.replace(..)`, and\n  `.delete(\"logger\")` — matched by middleware name (Rails'\n  `config.middleware.insert_before`/`delete`). Available via the prelude.\n- **Optional JWT extraction.** `JWT` now implements `OptionalFromRequestParts`,\n  so a handler can take `Option<JWT>` to serve authenticated and anonymous\n  callers from one endpoint (`Some` when a valid token is present, `None`\n  otherwise).\n- **Ergonomic verb-explicit route methods.** `Routes` now has `get`/`post`/\n  `put`/`delete`/`patch`/`head`/`options`/`trace` builder methods —\n  `Routes::new().get(\"/ping\", ping)` alongside the existing\n  `.add(\"/ping\", get(ping))`. They record the HTTP verb directly (exact\n  `cargo loco routes` output without relying on the debug-format regex).\n  Purely additive; `add` is unchanged.\n- **Opt-in background-job reaper (visibility timeout).** Each queue backend's\n  config accepts a `reaper: { age_minutes, interval_seconds }` block. When set,\n  the worker periodically requeues jobs stranded in `Processing` (e.g. by a\n  crashed worker) back to `Queued`, instead of requiring a manual\n  `cargo loco jobs requeue`. Disabled by default — existing behavior is unchanged.\n- **TLS to managed Postgres and Redis.** Postgres TLS works via the connection\n  URL (`sslmode=require`, `sslrootcert=...`) with no feature flag, and a new\n  `redis_tls` feature enables `rediss://` for both the queue and cache Redis\n  backends (webpki roots, pure-Rust `ring` provider — no C toolchain). New\n  how-to: \"Connect to Postgres and Redis over TLS\". ([#1191](https://github.com/loco-rs/loco/issues/1191), [#1341](https://github.com/loco-rs/loco/issues/1341))\n- **Typed, streaming `db::dump::<A>()`** — counterpart to `db::seed::<A>()` that\n  streams rows through their entity `Model` straight to disk (memory bounded to\n  a single row) with full type fidelity. New `Hooks::dump` (default dumps every\n  table; override it to call `db::dump` per entity) backs `cargo loco db seed\n  --dump`. ([#1691](https://github.com/loco-rs/loco/issues/1691))\n- **`logger::init_layer` / `logger::init_env_filter` are now public** building\n  blocks, so an app overriding `Hooks::init_logger` can reuse Loco's formatting\n  and filter policy while adding its own layers (e.g. `tracing-flame`, OTLP).\n  ([#1753](https://github.com/loco-rs/loco/issues/1753))\n\n### Changed\n\n- Wrap `TeraView` in `Arc` to reduce runtime memory usage ([#1703](https://github.com/loco-rs/loco/pull/1703)).\n- Refactor users model to reuse `find_by_api_key` in `Authenticable` ([#1706](https://github.com/loco-rs/loco/pull/1706)).\n- Split error detail generic parameters ([#1709](https://github.com/loco-rs/loco/pull/1709)).\n- Update `loco-new` for the new Rhai version ([#1704](https://github.com/loco-rs/loco/pull/1704)).\n- Replaced hand-rolled `Cargo.lock` parsing with the `cargo-lock` crate; retired\n  `duct_sh`.\n- **`Error` → HTTP-status mapping is now exhaustive.** The `IntoResponse for\n  Error` match dropped its trailing `_ => 500` wildcard: every variant (and every\n  nested `ModelError` variant) is now classified explicitly, so adding a new\n  error variant is a compile error until its status is chosen — it can no longer\n  silently default to `500`. The `Error` enum is also reorganized into\n  client-facing vs internal/infra regions. Behavior is unchanged (all infra\n  errors still map to `500`); no variant was renamed, so existing code is\n  unaffected.\n- **Rust edition 2024.** `loco-rs`, `loco-gen`, `xtask`, and the `loco` new-app\n  generator now compile on edition 2024 (MSRV floor unchanged at 1.94; edition\n  2024 needs ≥ 1.85). Editions are per-crate, so apps depending on Loco need not\n  change. Newly generated apps stay on edition 2021 for now.\n- Deduplicated the Postgres and SQLite background-queue providers: the shared\n  `Job`/`JobRegistry`/`RunOpts` now live in one module behind a `Driver` trait\n  (internal refactor, no behavior or API-path change).\n- In-memory cache now uses `moka::future::Cache` instead of wrapping the\n  synchronous cache behind `#[async_trait]` (removes a sync-behind-async smell;\n  no API change).\n- Cookie token extraction now uses `axum_extra`'s `Cookie::value()` instead of\n  hand-parsing the cookie string (byte-identical behavior).\n- Internal de-duplication pass (no public-API-path or behavior change unless\n  noted): the response helpers in `format` are now single-sourced through\n  `RenderBuilder`; the `JWT`/`JWTWithUser` extractors share one validate/decode\n  helper; the six validate extractors are generated from shared decoder fns +\n  two error-tier macros; the byte-identical `Job` struct is shared across the\n  SQL and Redis queue backends; the twin `cli::main` functions share one\n  `dispatch_common`; and duplicate env-var name constants were removed.\n- `format`'s two response paths were converged onto axum's canonical behavior:\n  `RenderBuilder::json` and `RenderBuilder::redirect_with_header_key` are now\n  infallible with respect to bad input (they return a `500` response, matching\n  `axum::Json` / `axum::response::Redirect`) instead of returning `Err`.\n\n### Fixed\n\n- **`db seed --dump` datetime round-trip on SQLite.** Loco's timestamptz columns\n  default to `CURRENT_TIMESTAMP`, which SQLite stores as space-separated text\n  (`\"YYYY-MM-DD HH:MM:SS\"`); dumps captured that verbatim and then failed\n  chrono's RFC3339 parse on re-seed (`Json(\"premature end of input\")`). Dumps now\n  normalize such datetimes to RFC3339 (already-RFC3339 text is untouched).\n  ([#1736](https://github.com/loco-rs/loco/issues/1736), [#1691](https://github.com/loco-rs/loco/issues/1691))\n- `cargo fmt` error in `loco-new` ([#1669](https://github.com/loco-rs/loco/pull/1669)).\n- UUID pattern in form field generation ([#1665](https://github.com/loco-rs/loco/pull/1665)).\n- Clippy warnings for recent Rust ([#1705](https://github.com/loco-rs/loco/pull/1705)).\n- Add tests for the auth extractor ([#1671](https://github.com/loco-rs/loco/pull/1671)).\n- **Postgres/SQLite queue backends now behave consistently.** Two divergences\n  between the Postgres and SQLite job backends are fixed: (1) `enqueue` on\n  Postgres previously *swallowed* a tag-serialization error (storing `tags =\n  null`); it now propagates the error like SQLite. (2) `complete_job` without a\n  repeat interval on Postgres stamped `run_at = NOW()` on the completed row while\n  SQLite left it untouched; Postgres now leaves `run_at` as-is, matching SQLite\n  (the interval path still reschedules `run_at` on both). The shared `to_job` row\n  mapper is now single-sourced across both backends.\n- **Storage mirror fan-out no longer stops at the first failing secondary.**\n  `rename`, `copy`, and `upload_stream` checked the failure mode *inside* the\n  secondary loop and returned early on the first failure, silently leaving later\n  mirrors stale (`upload`/`delete` were already correct). All five mutating\n  methods now share one helper that attempts every secondary (concurrently) and\n  applies the failure mode once.\n- **Postgres `BOOLEAN` columns are no longer dropped from `dump_tables`.** The\n  decode probe chain had no `bool` arm, so PG booleans (which don't fall back to\n  the numeric arms like SQLite's integer-backed booleans) were silently omitted.\n- **`Hooks::on_shutdown` now runs in worker-only start modes.** `WorkerOnly` and\n  `WorkerAndScheduler` bypassed `H::serve` (the hook's only caller); the shutdown\n  hook is now invoked on their shutdown path too.\n- **Postgres admin/maintenance URI is derived with the `url` crate.** Building it\n  via `db_uri.replace(db_name, \"/postgres\")` corrupted the URI when the database\n  name also appeared in the host or credentials.\n- **Foreign-key names are normalized consistently.** `reference_id` received a\n  normalized table name in `create_table` but raw names in\n  `add_reference`/`remove_reference`, so irregular plurals produced mismatched FK\n  column/constraint names between creation and later add/remove.\n- `ViewEngine` extractor now rejects gracefully (HTTP `500`) when the opt-in Tera\n  layer is absent, instead of declaring `Infallible` and then panicking.\n- `cargo loco routes` lists every HTTP verb of a multi-method route (route\n  introspection previously reported only the first).\n- Removed a fossilized 3-second `sleep` on every Redis queue boot (a leaked\n  test-isolation artifact; Postgres/SQLite had no equivalent).\n- Password redaction in test snapshots (`cleanup_user_model`) now targets the\n  quoted value precisely; the previous pattern had a degenerate quantifier that\n  swallowed the field following `password`.\n- Postgres test-database cleanup now completes synchronously (a joined worker\n  thread) instead of a fire-and-forget task, so parallel test runs no longer\n  leak databases; `PostgresTest` also builds its connection strings with the\n  `url` crate rather than a corruption-prone substring replace.\n- `RenderBuilder::template` now threads the builder's chained `status`/`header`/\n  `etag`/`cookies` through to the response; it previously delegated to the free\n  `html()` and silently dropped them.\n- `llms.txt`: two `Core concepts` links pointed at doc pages that don't exist\n  (`the-app/configuration/`, `the-app/testing/`); repointed to the sections that\n  actually document them. A new `cargo xtask llms-check` CI step now verifies the\n  curated LLM docs against the docs tree so these links can't drift silently.\n\n### Removed\n\n- **`Error` enum narrowing.** Removed four low-value/dependency-leaking variants\n  that all mapped to HTTP 500 and were never matched: `Error::EnvVar`,\n  `Error::SemVer`, `Error::TaskJoinError`, and `Error::Hash` (hashing errors now\n  surface as `Error::Message`). `Error` remains `#[non_exhaustive]`, so exhaustive\n  matches already require a wildcard arm and are unaffected.\n- Deleted shipped-but-dead code: the never-compiled\n  `controller/middleware/_archive/content_etag.rs` module and a commented-out\n  block of backtrace-blocklist regexes.\n\n","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/361656377/reactions","total_count":54,"+1":0,"-1":0,"laugh":0,"hooray":29,"confused":0,"heart":14,"rocket":11,"eyes":0}},{"url":"https://api.github.com/repos/loco-rs/loco/releases/235437119","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/235437119/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/235437119/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v0.16.3","id":235437119,"author":{"login":"kaplanelad","id":1224389,"node_id":"MDQ6VXNlcjEyMjQzODk=","avatar_url":"https://avatars.githubusercontent.com/u/1224389?v=4","gravatar_id":"","url":"https://api.github.com/users/kaplanelad","html_url":"https://github.com/kaplanelad","followers_url":"https://api.github.com/users/kaplanelad/followers","following_url":"https://api.github.com/users/kaplanelad/following{/other_user}","gists_url":"https://api.github.com/users/kaplanelad/gists{/gist_id}","starred_url":"https://api.github.com/users/kaplanelad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaplanelad/subscriptions","organizations_url":"https://api.github.com/users/kaplanelad/orgs","repos_url":"https://api.github.com/users/kaplanelad/repos","events_url":"https://api.github.com/users/kaplanelad/events{/privacy}","received_events_url":"https://api.github.com/users/kaplanelad/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84OCHw_","tag_name":"v0.16.3","target_commitish":"master","name":"Loco v0.16.3","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-27T09:20:33Z","updated_at":"2025-07-27T09:28:24Z","published_at":"2025-07-27T09:28:24Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v0.16.3","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v0.16.3","body":"Follow the [changelog](https://github.com/loco-rs/loco/blob/master/CHANGELOG.md#v0163)","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/235437119/reactions","total_count":9,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":8,"rocket":1,"eyes":0}},{"url":"https://api.github.com/repos/loco-rs/loco/releases/235437102","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/235437102/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/235437102/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v0.16.2","id":235437102,"author":{"login":"kaplanelad","id":1224389,"node_id":"MDQ6VXNlcjEyMjQzODk=","avatar_url":"https://avatars.githubusercontent.com/u/1224389?v=4","gravatar_id":"","url":"https://api.github.com/users/kaplanelad","html_url":"https://github.com/kaplanelad","followers_url":"https://api.github.com/users/kaplanelad/followers","following_url":"https://api.github.com/users/kaplanelad/following{/other_user}","gists_url":"https://api.github.com/users/kaplanelad/gists{/gist_id}","starred_url":"https://api.github.com/users/kaplanelad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaplanelad/subscriptions","organizations_url":"https://api.github.com/users/kaplanelad/orgs","repos_url":"https://api.github.com/users/kaplanelad/repos","events_url":"https://api.github.com/users/kaplanelad/events{/privacy}","received_events_url":"https://api.github.com/users/kaplanelad/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84OCHwu","tag_name":"v0.16.2","target_commitish":"master","name":"Loco v0.16.2","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-22T10:53:46Z","updated_at":"2025-07-27T09:28:02Z","published_at":"2025-07-27T09:28:02Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v0.16.2","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v0.16.2","body":"Follow the [changelog](https://github.com/loco-rs/loco/blob/master/CHANGELOG.md#v0162)","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/235437102/reactions","total_count":3,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":2,"rocket":1,"eyes":0}},{"url":"https://api.github.com/repos/loco-rs/loco/releases/235437011","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/235437011/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/235437011/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v0.16.1","id":235437011,"author":{"login":"kaplanelad","id":1224389,"node_id":"MDQ6VXNlcjEyMjQzODk=","avatar_url":"https://avatars.githubusercontent.com/u/1224389?v=4","gravatar_id":"","url":"https://api.github.com/users/kaplanelad","html_url":"https://github.com/kaplanelad","followers_url":"https://api.github.com/users/kaplanelad/followers","following_url":"https://api.github.com/users/kaplanelad/following{/other_user}","gists_url":"https://api.github.com/users/kaplanelad/gists{/gist_id}","starred_url":"https://api.github.com/users/kaplanelad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaplanelad/subscriptions","organizations_url":"https://api.github.com/users/kaplanelad/orgs","repos_url":"https://api.github.com/users/kaplanelad/repos","events_url":"https://api.github.com/users/kaplanelad/events{/privacy}","received_events_url":"https://api.github.com/users/kaplanelad/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84OCHvT","tag_name":"v0.16.1","target_commitish":"master","name":"Loco v0.16.1","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-18T04:18:35Z","updated_at":"2025-07-27T09:27:16Z","published_at":"2025-07-27T09:27:16Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v0.16.1","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v0.16.1","body":"Follow the [changelog](https://github.com/loco-rs/loco/blob/master/CHANGELOG.md#v0161)","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/235437011/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":1,"eyes":0}},{"url":"https://api.github.com/repos/loco-rs/loco/releases/235436992","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/235436992/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/235436992/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v0.16.0","id":235436992,"author":{"login":"kaplanelad","id":1224389,"node_id":"MDQ6VXNlcjEyMjQzODk=","avatar_url":"https://avatars.githubusercontent.com/u/1224389?v=4","gravatar_id":"","url":"https://api.github.com/users/kaplanelad","html_url":"https://github.com/kaplanelad","followers_url":"https://api.github.com/users/kaplanelad/followers","following_url":"https://api.github.com/users/kaplanelad/following{/other_user}","gists_url":"https://api.github.com/users/kaplanelad/gists{/gist_id}","starred_url":"https://api.github.com/users/kaplanelad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaplanelad/subscriptions","organizations_url":"https://api.github.com/users/kaplanelad/orgs","repos_url":"https://api.github.com/users/kaplanelad/repos","events_url":"https://api.github.com/users/kaplanelad/events{/privacy}","received_events_url":"https://api.github.com/users/kaplanelad/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84OCHvA","tag_name":"v0.16.0","target_commitish":"master","name":"Loco v0.16.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-06-25T07:09:26Z","updated_at":"2025-07-27T09:26:40Z","published_at":"2025-07-27T09:26:40Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v0.16.0","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v0.16.0","body":"We're excited to announce a major release packed with features, improvements, and fixes that will supercharge your Loco experience!\r\n\r\nMajor highlights:\r\n\r\n📖 NEW: OpenAPI Support - Full OpenAPI 3.0 integration with Swagger UI, ReDoc, and Scalar visualizers! Auto-generate API docs from your routes with utoipa annotations. Read more: https://github.com/loco-rs/loco-openapi-Initializer\r\n🔄 New Redis Job System - We've completely replaced Sidekiq with our own Redis-based job management system for better performance and reliability\r\n⚡ Enhanced Cache API - Now with full generic type support and Redis driver configuration\r\n📦 Embedded Assets Support - Bundle your static assets directly into your binary for easier deployment\r\n🔧 YAML Response Support - Native YAML content-type responses alongside JSON\r\n🛡️ Improved Auth - Better error handling and public JWT extraction functions\r\n🧹 Dependency Cleanup - Removed hyper, thousands, cfg-if, reqwest, and serde_variant dependencies + major version bumps for tokio, redis, and more\r\n📋 See the complete list of features and improvements: https://github.com/loco-rs/loco/blob/master/CHANGELOG.md#v0160\r\n⚠️ Breaking Changes: This release includes several breaking changes for the job system, cache API, email validation, and logger initialization.\r\n\r\nSee the full upgrade guide at: https://github.com/loco-rs/loco/blob/3f48a3efecae4a23295bc0458ec3fc1269ccc1c9/docs-site/content/docs/extras/upgrades.md#upgrade-from-015x-to-016x\r\n🔧 Note: We're currently experiencing an issue with the loco.rs documentation. The docs will be deployed once the problem is resolved.\r\n\r\n🙏 Huge thanks to all our contributors who made this release possible! Your contributions, feedback, and support continue to drive Loco forward.","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/235436992/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":1,"eyes":0}},{"url":"https://api.github.com/repos/loco-rs/loco/releases/208592815","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/208592815/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/208592815/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v0.15.0","id":208592815,"author":{"login":"kaplanelad","id":1224389,"node_id":"MDQ6VXNlcjEyMjQzODk=","avatar_url":"https://avatars.githubusercontent.com/u/1224389?v=4","gravatar_id":"","url":"https://api.github.com/users/kaplanelad","html_url":"https://github.com/kaplanelad","followers_url":"https://api.github.com/users/kaplanelad/followers","following_url":"https://api.github.com/users/kaplanelad/following{/other_user}","gists_url":"https://api.github.com/users/kaplanelad/gists{/gist_id}","starred_url":"https://api.github.com/users/kaplanelad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaplanelad/subscriptions","organizations_url":"https://api.github.com/users/kaplanelad/orgs","repos_url":"https://api.github.com/users/kaplanelad/repos","events_url":"https://api.github.com/users/kaplanelad/events{/privacy}","received_events_url":"https://api.github.com/users/kaplanelad/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84Mbt-v","tag_name":"v0.15.0","target_commitish":"master","name":"Loco v0.15.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-03-26T11:33:20Z","updated_at":"2025-03-27T07:25:18Z","published_at":"2025-03-27T07:25:18Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v0.15.0","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v0.15.0","body":"* Added total_items to pagination view & response. https://github.com/loco-rs/loco/pull/1197\r\n* Flatten (de)serialization of custom user claims. https://github.com/loco-rs/loco/pull/1159\r\n* Updated validator to 0.20. https://github.com/loco-rs/loco/pull/1199\r\n* Scaffold v2. https://github.com/loco-rs/loco/pull/1209\r\n* Fix generator Docker deployment to support both server-side and client-side rendering. https://github.com/loco-rs/loco/pull/1227\r\n* Docs: num_workers worker configuration. https://github.com/loco-rs/loco/pull/1242\r\n* Smoother model validations. https://github.com/loco-rs/loco/pull/1233\r\n* Docs: num_workers worker configuration. https://github.com/loco-rs/loco/pull/1242\r\n* Ignore SQLite WAL and SHM files and update Cargo watch crate docs. https://github.com/loco-rs/loco/pull/1254\r\n* Remove fs-err crate. https://github.com/loco-rs/loco/pull/1253\r\n* Allows to run scheduler as part of cargo loco start. https://github.com/loco-rs/loco/pull/1247\r\n* Added prefix and route nesting to AppRoutes. https://github.com/loco-rs/loco/pull/1241\r\n* Replace hyper crate with axum. https://github.com/loco-rs/loco/pull/1258\r\n* Remove mime crate. https://github.com/loco-rs/loco/pull/1256\r\n* Support async tests. https://github.com/loco-rs/loco/pull/1237\r\n* Change job queue status from cli. https://github.com/loco-rs/loco/pull/1228\r\n* Handle panics in queue worker. https://github.com/loco-rs/loco/pull/1274\r\n* Schema with defaults. https://github.com/loco-rs/loco/pull/1273\r\n* Add data subsystem. https://github.com/loco-rs/loco/pull/1267\r\n* Add \"endpoint\" arg to azure storage builder.https://github.com/loco-rs/loco/pull/1317\r\n* Improve readability and performance by using map_err in Model. https://github.com/loco-rs/loco/pull/1311","discussion_url":"https://github.com/loco-rs/loco/discussions/1324","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/208592815/reactions","total_count":23,"+1":0,"-1":0,"laugh":0,"hooray":18,"confused":0,"heart":0,"rocket":5,"eyes":0}},{"url":"https://api.github.com/repos/loco-rs/loco/releases/201161966","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/201161966/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/201161966/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v0.14.1","id":201161966,"author":{"login":"kaplanelad","id":1224389,"node_id":"MDQ6VXNlcjEyMjQzODk=","avatar_url":"https://avatars.githubusercontent.com/u/1224389?v=4","gravatar_id":"","url":"https://api.github.com/users/kaplanelad","html_url":"https://github.com/kaplanelad","followers_url":"https://api.github.com/users/kaplanelad/followers","following_url":"https://api.github.com/users/kaplanelad/following{/other_user}","gists_url":"https://api.github.com/users/kaplanelad/gists{/gist_id}","starred_url":"https://api.github.com/users/kaplanelad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaplanelad/subscriptions","organizations_url":"https://api.github.com/users/kaplanelad/orgs","repos_url":"https://api.github.com/users/kaplanelad/repos","events_url":"https://api.github.com/users/kaplanelad/events{/privacy}","received_events_url":"https://api.github.com/users/kaplanelad/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84L_Xzu","tag_name":"v0.14.1","target_commitish":"master","name":"Loco v0.14.1","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-01-21T06:26:06Z","updated_at":"2025-02-19T11:49:51Z","published_at":"2025-02-19T11:49:51Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v0.14.1","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v0.14.1","body":"- Fix: bump shuttle to 0.51.0. https://github.com/loco-rs/loco/pull/1169\r\n- Return 422 status code for JSON rejection errors. https://github.com/loco-rs/loco/pull/1173\r\n- Address clippy warnings for Rust stable 1.84. https://github.com/loco-rs/loco/pull/1168\r\n- Bump shuttle to 0.51.0. https://github.com/loco-rs/loco/pull/1169\r\n- Return 422 status code for JSON rejection errors. https://github.com/loco-rs/loco/pull/1173\r\n- Return json validation details response. https://github.com/loco-rs/loco/pull/1174\r\n- Fix example command after generating schedule. https://github.com/loco-rs/loco/pull/1176\r\n- Fixed independent features. https://github.com/loco-rs/loco/pull/1177\r\n- Custom response header for redirect. https://github.com/loco-rs/loco/pull/1186\r\n- Added run_on_start feature to scheduler. https://github.com/loco-rs/loco/pull/1184\r\n- Feat: public jwt extractor from non-mutable reference to parts. https://github.com/loco-rs/loco/pull/1190","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/201161966/reactions","total_count":9,"+1":0,"-1":0,"laugh":0,"hooray":3,"confused":0,"heart":3,"rocket":3,"eyes":0}},{"url":"https://api.github.com/repos/loco-rs/loco/releases/201161836","assets_url":"https://api.github.com/repos/loco-rs/loco/releases/201161836/assets","upload_url":"https://uploads.github.com/repos/loco-rs/loco/releases/201161836/assets{?name,label}","html_url":"https://github.com/loco-rs/loco/releases/tag/v0.14.0","id":201161836,"author":{"login":"kaplanelad","id":1224389,"node_id":"MDQ6VXNlcjEyMjQzODk=","avatar_url":"https://avatars.githubusercontent.com/u/1224389?v=4","gravatar_id":"","url":"https://api.github.com/users/kaplanelad","html_url":"https://github.com/kaplanelad","followers_url":"https://api.github.com/users/kaplanelad/followers","following_url":"https://api.github.com/users/kaplanelad/following{/other_user}","gists_url":"https://api.github.com/users/kaplanelad/gists{/gist_id}","starred_url":"https://api.github.com/users/kaplanelad/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaplanelad/subscriptions","organizations_url":"https://api.github.com/users/kaplanelad/orgs","repos_url":"https://api.github.com/users/kaplanelad/repos","events_url":"https://api.github.com/users/kaplanelad/events{/privacy}","received_events_url":"https://api.github.com/users/kaplanelad/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOKqWQR84L_Xxs","tag_name":"v0.14.0","target_commitish":"master","name":"Loco v0.14.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-01-09T08:41:16Z","updated_at":"2025-02-19T11:49:08Z","published_at":"2025-02-19T11:49:08Z","assets":[],"tarball_url":"https://api.github.com/repos/loco-rs/loco/tarball/v0.14.0","zipball_url":"https://api.github.com/repos/loco-rs/loco/zipball/v0.14.0","body":"- Feat: smart migration generator. you can now generate migration based on naming them for creating a table, adding columns, references, join tables and more. https://github.com/loco-rs/loco/pull/1086\r\n- Feat: cargo loco routes will now pretty-print routes\r\n- Fix: guard jwt error behind feature flag. https://github.com/loco-rs/loco/pull/1032\r\n- Fix: logger file_appender not using the seperated format setting. https://github.com/loco-rs/loco/pull/1036\r\n- Seed cli command. https://github.com/loco-rs/loco/pull/1046\r\n- Updated validator to 0.19. https://github.com/loco-rs/loco/pull/993\r\n- Testing helpers: simplified function calls + adding html selector. https://github.com/loco-rs/loco/pull/1047\r\n- Implement commands to manage background jobs. https://github.com/loco-rs/loco/pull/1071\r\n- Magic link. https://github.com/loco-rs/loco/pull/1085\r\n- Infer migration. https://github.com/loco-rs/loco/pull/1086\r\n- Remove unnecessary calls to 'register_tasks' functions in scheduler. https://github.com/loco-rs/loco/pull/1100\r\n- Implement commands to manage background jobs. https://github.com/loco-rs/loco/pull/1071\r\n- Expose hello_name for SMTP client config. https://github.com/loco-rs/loco/pull/1057\r\n- Use reqwest with rustls rather than openssl. https://github.com/loco-rs/loco/pull/1058\r\n- More flexible config, take more values from ENV. https://github.com/loco-rs/loco/pull/1058\r\n- Refactor: Use opendal to replace object_store. https://github.com/loco-rs/loco/pull/897\r\n- Allow override loco template. https://github.com/loco-rs/loco/pull/1102\r\n- Support custom config folder. https://github.com/loco-rs/loco/pull/1081\r\n- Feat: upgrade to Axum 8. https://github.com/loco-rs/loco/pull/1130\r\n- Create load config hook. https://github.com/loco-rs/loco/pull/1143\r\n- Initial impl new migration dsl. https://github.com/loco-rs/loco/pull/1125\r\n- Allow disable limit_payload middleware. https://github.com/loco-rs/loco/pull/1113","reactions":{"url":"https://api.github.com/repos/loco-rs/loco/releases/201161836/reactions","total_count":6,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":6,"rocket":0,"eyes":0}}]