Compare commits

..

No commits in common. "main" and "notashelf/push-wsulzmvymvxq" have entirely different histories.

403 changed files with 53193 additions and 57223 deletions

View file

@ -1,32 +0,0 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.rs]
indent_style = space
indent_size = 2
[justfile]
indent_style = space
indent_size = 2
[*.toml]
indent_style = space
indent_size = 2
[*.md]
indent_style = space
indent_size = 2
trim_trailing_whitespace = false
[*.nix]
indent_style = space
indent_size = 2
[*.scss]
indent_style = space
indent_size = 2

BIN
Cargo.lock generated

Binary file not shown.

View file

@ -1,5 +1,5 @@
[workspace]
members = ["crates/*", "packages/*", "xtask"]
members = ["crates/*", "xtask"]
exclude = ["crates/pinakes-core/tests/fixtures/test-plugin"]
resolver = "3"
@ -11,44 +11,35 @@ readme = true
rust-version = "1.95.0" # follows nightly Rust
[workspace.dependencies]
# Crate components for Pinakes. Those are the internal dependencies that are built
# while building any package.
# Crate components for Pinakes.
pinakes-core = { path = "./crates/pinakes-core" }
pinakes-server = { path = "./crates/pinakes-server" }
pinakes-plugin-api = { path = "./crates/pinakes-plugin-api" }
pinakes-ui = { path = "./crates/pinakes-ui" }
pinakes-tui = { path = "./crates/pinakes-tui" }
# Pinakes itself is a REST API server. UI and TUI are official visual components
# that connect to the server. Using the API documentation, the user can write
# their own clients, but we separate "crates" and "packages" to establish the
# distinction properly.
pinakes-server = { path = "./packages/pinakes-server" }
pinakes-ui = { path = "./packages/pinakes-ui" }
pinakes-tui = { path = "./packages/pinakes-tui" }
# Other dependencies. Declaring them in the virtual manifests lets use reuse the crates
# without having to track individual crate version across different types of crates. This
# also includes *dev* dependencies.
tokio = { version = "1.50.0", features = ["full"] }
tokio = { version = "1.49.0", features = ["full"] }
tokio-util = { version = "0.7.18", features = ["rt"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
toml = "1.0.7"
clap = { version = "4.6.0", features = ["derive", "env"] }
toml = "1.0.3"
clap = { version = "4.5.60", features = ["derive", "env"] }
chrono = { version = "0.4.44", features = ["serde"] }
uuid = { version = "1.22.0", features = ["v7", "serde"] }
uuid = { version = "1.21.0", features = ["v7", "serde"] }
thiserror = "2.0.18"
anyhow = "1.0.102"
tracing = "0.1.44"
tracing-subscriber = { version = "0.3.23", features = ["env-filter", "json"] }
tracing-subscriber = { version = "0.3.22", features = ["env-filter", "json"] }
blake3 = "1.8.3"
rustc-hash = "2.1.1"
ed25519-dalek = { version = "2.2.0", features = ["std"] }
lofty = "0.23.3"
lopdf = "0.40.0"
ed25519-dalek = { version = "2.1.1", features = ["std"] }
lofty = "0.23.2"
lopdf = "0.39.0"
epub = "2.1.5"
matroska = "0.30.0"
gray_matter = "0.3.2"
kamadak-exif = "0.6.1"
rusqlite = { version = "0.37.0", features = ["bundled", "column_decltype"] }
rusqlite = { version = "=0.37.0", features = ["bundled", "column_decltype"] }
tokio-postgres = { version = "0.7.16", features = [
"with-uuid-1",
"with-chrono-0_4",
@ -61,7 +52,7 @@ native-tls = "0.2.18"
refinery = { version = "0.9.0", features = ["rusqlite", "tokio-postgres"] }
walkdir = "2.5.0"
notify = { version = "8.2.0", features = ["macos_fsevent"] }
winnow = "1.0.0"
winnow = "0.7.14"
axum = { version = "0.8.8", features = ["macros", "multipart"] }
axum-server = { version = "0.8.0" }
tower = "0.5.3"
@ -76,7 +67,7 @@ dioxus = { version = "0.7.3", features = ["desktop", "router"] }
dioxus-core = { version = "0.7.3" }
async-trait = "0.1.89"
futures = "0.3.32"
image = { version = "0.25.10", default-features = false, features = [
image = { version = "0.25.9", default-features = false, features = [
"jpeg",
"png",
"webp",
@ -84,7 +75,7 @@ image = { version = "0.25.10", default-features = false, features = [
"tiff",
"bmp",
] }
pulldown-cmark = "0.13.3"
pulldown-cmark = "0.13.1"
ammonia = "4.1.2"
argon2 = { version = "0.5.3", features = ["std"] }
mime_guess = "2.0.5"
@ -93,18 +84,17 @@ dioxus-free-icons = { version = "0.10.0", features = ["font-awesome-solid"] }
rfd = "0.17.2"
gloo-timers = { version = "0.3.0", features = ["futures"] }
rand = "0.10.0"
moka = { version = "0.12.15", features = ["future"] }
moka = { version = "0.12.14", features = ["future"] }
urlencoding = "2.1.3"
image_hasher = "3.1.1"
percent-encoding = "2.3.2"
http = "1.4.0"
wasmtime = { version = "43.0.0", features = ["component-model"] }
wit-bindgen = "0.54.0"
tempfile = "3.27.0"
wasmtime = { version = "42.0.1", features = ["component-model"] }
wit-bindgen = "0.53.1"
tempfile = "3.26.0"
utoipa = { version = "5.4.0", features = ["axum_extras", "uuid", "chrono"] }
utoipa-axum = { version = "0.2.0" }
utoipa-swagger-ui = { version = "9.0.2", features = ["axum"] }
http-body-util = "0.1.3"
# See:
# <https://doc.rust-lang.org/rustc/lints/listing/allowed-by-default.html>

32
HACKING.md Normal file
View file

@ -0,0 +1,32 @@
# Hacking Pinakes
Pinakes is a lot of things. One of the things it aims to be is _complete_. To be
complete in features, to be complete in documentation and to be complete in
hackability. This document covers, very comprehensively, how you may:
- Build Pinakes
- Develop Pinakes
- Contribute to Pinakes
for developers as well as:
- Distribute Pinakes
for Pinakes maintainers and packagers.
## Building Pinakes
Pinakes is built with Rust (nightly edition) and various crates. The most
_notable_ crate among those is Dioxus, which provides its own toolkit. The UI
for Pinakes is usually _not_ built with the Dioxus CLI but instead with
`cargo build`. This also applies to distributable build results.
[Direnv]: https://direnv.net
To build Pinakes, simply pick the components you want and build them with
`cargo build --release --package <component>`. A Nix shell is provided for
reproducible developer environments and you may obtain all build dependencies by
simply running `nix develop` or `direnv allow` if you use [Direnv]. Nix is a
cross-platform build tool and works on most Linux distributions as well as
Darwin. While distro-specific package managers _might_ work, Nix is the only
supported one.

BIN
LICENSE

Binary file not shown.

View file

@ -4,9 +4,6 @@ edition.workspace = true
version.workspace = true
license.workspace = true
[features]
ffmpeg-tests = []
[dependencies]
tokio = { workspace = true }
serde = { workspace = true }
@ -46,13 +43,18 @@ moka = { workspace = true }
urlencoding = { workspace = true }
image_hasher = { workspace = true }
rustc-hash = { workspace = true }
pinakes-plugin-api = { workspace = true }
wasmtime = { workspace = true }
ed25519-dalek = { workspace = true }
# Plugin system
pinakes-plugin-api.workspace = true
wasmtime.workspace = true
ed25519-dalek.workspace = true
[features]
ffmpeg-tests = []
[lints]
workspace = true
[dev-dependencies]
tempfile = { workspace = true }
rand = { workspace = true }
[lints]
workspace = true

View file

@ -4,25 +4,32 @@ version.workspace = true
edition.workspace = true
license.workspace = true
[features]
default = []
wasm = ["wit-bindgen"]
[dependencies]
# Core dependencies
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
async-trait = { workspace = true }
tracing = { workspace = true }
# For plugin manifest parsing
toml = { workspace = true }
# For media types and identifiers
uuid = { workspace = true }
chrono = { workspace = true }
mime_guess = { workspace = true }
rustc-hash = { workspace = true }
wit-bindgen = { workspace = true, optional = true }
[dev-dependencies]
tokio = { workspace = true, features = ["rt", "rt-multi-thread", "macros"] }
# WASM bridge types
wit-bindgen = { workspace = true, optional = true }
[lints]
workspace = true
[features]
default = []
wasm = ["wit-bindgen"]
[dev-dependencies]
tokio = { workspace = true, features = ["rt", "rt-multi-thread", "macros"] }

View file

@ -36,10 +36,10 @@ utoipa = { workspace = true }
utoipa-axum = { workspace = true }
utoipa-swagger-ui = { workspace = true }
[dev-dependencies]
http-body-util = { workspace = true }
reqwest = { workspace = true }
tempfile = { workspace = true }
[lints]
workspace = true
[dev-dependencies]
http-body-util = "0.1.3"
reqwest = { workspace = true }
tempfile = { workspace = true }

Some files were not shown because too many files have changed in this diff Show more