Something went wrong. Try again.
atproto Thingiverse but good
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205[workspace]members = [".", "crates/*"]resolver = "3"
[workspace.package]version = "0.1.0"edition = "2024"license = "MPL-2.0"
[workspace.dependencies]jacquard = { path = "../jacquard/crates/jacquard", default-features = false, features = ["derive", "api_bluesky", "streaming"] }jacquard-axum = { path = "../jacquard/crates/jacquard-axum" }jacquard-common = { path = "../jacquard/crates/jacquard-common" }jacquard-derive = { path = "../jacquard/crates/jacquard-derive" }jacquard-lexicon = { path = "../jacquard/crates/jacquard-lexicon", default-features = false }serde = { version = "1.0", features = ["derive", "rc"] }smol_str = { version = "0.3", features = ["serde"] }thiserror = "2.0"miette = "7.6"postcard = "1"wasm-bindgen = "=0.2.121"web-time = "1"
[package]name = "polymodel"version.workspace = trueedition.workspace = truelicense.workspace = truedescription = "atproto Thingiverse but good "
[features]default = ["web"]web = ["dioxus/web"]desktop = ["dioxus/desktop"]mobile = ["dioxus/mobile"]server = [ "dioxus/server", "dep:axum", "dep:tower", "dep:tower-http", # XRPC read endpoint handlers (jacquard-axum ExtractXrpc / IntoRouter). "dep:jacquard-axum", # Generated typed XRPC request/response/view types.
# Indexing infrastructure (Hydrant firehose + SQLite projection) "dep:hydrant", "dep:sqlx", "dep:libsqlite3-sys", "dep:tokio", "dep:futures", "dep:anyhow", "dep:dotenvy", "dep:chrono", "dep:http-body-util", "dep:tracing-subscriber", "dep:rustls", # OAuth (PM-27): confidential client, private cookie jar key, secret sources. "dep:axum-extra",
"dep:keyring", "dep:zip", # PM-43: server-side decode of uploaded image dimensions (for #image # aspectRatio) and opaque draft id generation. "dep:imagesize", "dep:ulid", "dep:cid",][dependencies]dioxus = { version = "0.7", features = ["router", "fullstack"] }dioxus-sdk = { version = "0.7", default-features = false, features = ["time"] }jacquard = { workspace = true }jacquard-axum = { workspace = true, optional = true }jacquard-common = { workspace = true }jacquard-derive = { workspace = true }# PM-43: LexiconSchema::validate for draft → ThingInput assembly, so draft# validation tracks the generated lexicon constraints instead of duplicating them.jacquard-lexicon = { workspace = true }# Generated lexicon bindings (typed request/response/view types for XRPC routes).polymodel-api = { path = "crates/polymodel-api" }polymodel-renderer-protocol = { path = "crates/polymodel-renderer-protocol" }polymodel-ldraw-core = { path = "crates/polymodel-ldraw-core" }serde = { workspace = true }serde_json = "1.0"thiserror = { workspace = true }async-trait = "0.1"unicode-normalization = "0.1"urlencoding = "2"tracing = { version = "0.1", default-features = false, features = ["std"] }
axum = { version = "0.8", optional = true, features = ["multipart"] }tower = { version = "0.5", optional = true }tower-http = { version = "0.6", optional = true, features = ["trace"] }rustls = { version = "0.23", default-features = false, features = ["aws-lc-rs", "std"], optional = true }# Server-only indexing infrastructure.# hydrant is pinned to a specific commit to protect against breaking API changes.hydrant = { git = "https://tangled.org/ptr.pet/hydrant", rev = "1145fa1bb194372ceea81ab48b5d68d304da34ad", default-features = false, features = ["indexer", "indexer_stream"], optional = true }# Compile-time-checked queries. sqlx version matches the `sqlx-cli` provided by# the nix dev shell so `cargo sqlx prepare` and the macros agree on the .sqlx# cache format. `cargo sqlx prepare --features server` generates the committed# .sqlx cache for offline/CI builds.sqlx = { version = "0.9", default-features = false, features = [ "runtime-tokio", "sqlite", "macros", "migrate",], optional = true }# Bundle SQLite (libsqlite3-sys bundled enables FTS5) so no system libsqlite3 is# required. Version follows sqlx 0.9's libsqlite3-sys requirement.libsqlite3-sys = { version = "0.37", features = ["bundled"], optional = true }tokio = { version = "1", features = ["rt-multi-thread", "macros", "signal"], optional = true }futures = { version = "0.3", optional = true }anyhow = { version = "1", optional = true }dotenvy = { version = "0.15", optional = true }chrono = { version = "0.4", optional = true }tracing-subscriber = { version = "0.3", optional = true, default-features = false, features = [ "std", "fmt", "env-filter",] }http = "1.4"http-body-util = { version = "0.1", optional = true }reqwest = { version = "0.12", default-features = false, features = ["json", "charset"] }rand = "0.9"
# PM-27 OAuth: private cookie-jar signing key and swappable secret sources# (OS keyring preferred; env override). reqwest is shared with the client crate.axum-extra = { version = "0.10", optional = true, features = ["cookie"] }
keyring = { version = "3", optional = true }base64 = { version = "0.22" }sha2 = { version = "0.10" }# CID/multihash verification for each fetched LDraw chunk.cid = { version = "0.11", default-features = false, features = ["std"], optional = true }zip = { version = "2", default-features = false, optional = true }# PM-43: header-only image dimension probe (no full decode) for #image# aspectRatio; ULID for opaque, sortable draft ids. Both server-only.imagesize = { version = "0.13", optional = true }ulid = { version = "1", optional = true }bytes = { version = "1.12.0", features = ["serde"] }
[target.'cfg(all(target_family = "wasm", target_os = "unknown"))'.dependencies]console_error_panic_hook = "0.1"js-sys = "0.3"tracing-wasm = "0.2"wasm-bindgen = "=0.2.121"wasm-bindgen-futures = "0.4"web-sys = { version = "0.3", features = ["Window", "Document", "Element", "Event", "EventTarget", "HtmlCanvasElement", "WebGl2RenderingContext", "Performance", "MouseEvent", "WheelEvent", "PointerEvent", "DomRect", "BroadcastChannel", "console", "Response", "ReadableStream", "ReadableStreamDefaultReader", "File", "FileList", "Blob", "HtmlAnchorElement", "HtmlInputElement", "HtmlDetailsElement", "Worker", "WorkerOptions", "WorkerType", "OffscreenCanvas", "MessageEvent", "ErrorEvent"] }
[dev-dependencies]anyhow = "1"axum = "0.8"axum-extra = { version = "0.10", features = ["cookie"] }base64 = "0.22"chrono = "0.4"futures = "0.3"hydrant = { git = "https://tangled.org/ptr.pet/hydrant", rev = "1145fa1bb194372ceea81ab48b5d68d304da34ad", default-features = false, features = ["indexer", "indexer_stream"] }http-body-util = "0.1"imagesize = "0.13"jacquard-axum = { workspace = true }keyring = "3"serde_json = "1.0"tempfile = "3"ulid = "1"urlencoding = "2"libsqlite3-sys = { version = "0.37", features = ["bundled"] }rustls = { version = "0.23", default-features = false, features = ["aws-lc-rs", "std"] }sha2 = "0.10"sqlx = { version = "0.9", default-features = false, features = [ "runtime-tokio", "sqlite", "macros", "migrate",] }tokio = { version = "1", features = ["rt", "macros"] }tower = "0.5"tower-http = { version = "0.6", features = ["trace"] }tracing-subscriber = { version = "0.3", default-features = false, features = [ "std", "fmt", "env-filter",] }
[build-dependencies]serde_json = "1.0"
[profile.web-release]inherits = "release"opt-level = "z"debug = falselto = "fat"codegen-units = 1strip = "symbols"panic = "abort"
[profile.worker-release]inherits = "release"opt-level = "z"lto = "fat"debug = falsecodegen-units = 1strip = "symbols"panic = "abort"