[workspace] resolver = "3" members = ["crates/*", "apps/*", "xtask"] default-members = ["crates/*", "apps/notescraft", "apps/notescraft-cli", "xtask"] [workspace.package] version = "0.1.0" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.95" repository = "https://git.marcospaulo.dev.br/masi/notescraft" [workspace.dependencies] craft-ui = { git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "7fcee66b8eef8eac3c7644fd024e1f1b051f5a3e", features = ["serde"] } craft-atomic = { git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "7fcee66b8eef8eac3c7644fd024e1f1b051f5a3e" } craft-settings = { git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "7fcee66b8eef8eac3c7644fd024e1f1b051f5a3e" } craft-quit = { git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "7fcee66b8eef8eac3c7644fd024e1f1b051f5a3e" } craft-print = { git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "7fcee66b8eef8eac3c7644fd024e1f1b051f5a3e" } # internal notescraft-vault = { path = "crates/vault" } notescraft-git = { path = "crates/git" } notescraft-vim = { path = "crates/vim" } notescraft-math = { path = "crates/math" } notescraft-lottie = { path = "crates/lottie" } notescraft-acp = { path = "crates/acp" } notescraft-pdf = { path = "crates/pdf" } notescraft-markdown = { path = "crates/markdown" } notescraft-syntax = { path = "crates/syntax" } notescraft-regex = { path = "crates/regex" } notescraft-index = { path = "crates/index" } notescraft-backlinks = { path = "crates/backlinks" } notescraft-blocks = { path = "crates/blocks" } notescraft-knowledge = { path = "crates/knowledge" } notescraft-lint = { path = "crates/lint" } notescraft-canvas = { path = "crates/canvas" } notescraft-graph = { path = "crates/graph" } notescraft-bases = { path = "crates/bases" } notescraft-templates = { path = "crates/templates" } notescraft-sync = { path = "crates/sync" } notescraft-collab = { path = "crates/collab" } notescraft-annotate = { path = "crates/annotate" } notescraft-calendar = { path = "crates/calendar" } notescraft-tasks = { path = "crates/tasks" } notescraft-textdiff = { path = "crates/textdiff" } notescraft-htmlmd = { path = "crates/htmlmd" } notescraft-srs = { path = "crates/srs" } notescraft-templater = { path = "crates/templater" } notescraft-plugins = { path = "crates/plugins" } notescraft-themes = { path = "crates/themes" } notescraft-engine = { path = "crates/engine" } notescraft-editor = { path = "crates/editor" } notescraft-ui-egui = { path = "crates/ui-egui" } notescraft-mcp = { path = "crates/mcp" } notescraft-i18n = { path = "crates/i18n" } notescraft-diagrams = { path = "crates/diagrams" } notescraft-whiteboard = { path = "crates/whiteboard" } notescraft-testkit = { path = "crates/testkit" } # external flate2 = { version = "1", default-features = false, features = ["rust_backend"] } rfd = "0.17" thiserror = "2" # Native macOS menu bar (apps/notescraft only; owner-approved: close/minimise/zoom live in the menu bar since the title bar is gone). No default features: no GTK. muda = { version = "=0.21.2", default-features = false } egui = { version = "0.36", default-features = false } unicode-bidi = { version = "0.3.18", default-features = false, features = ["std", "hardcoded-data"] } egui_extras = { version = "0.36", default-features = false, features = ["svg"] } # Clipboard images and file lists for paste (owner-approved 2026-10-20; already in the lockfile through egui-winit). image-data only: no default features. arboard = { version = "3.6", default-features = false, features = ["image-data"] } eframe = { version = "0.36", default-features = false } egui_kittest = "0.36" log = "0.4" # Audio output for UI sounds; the same version SoundCraft, FilmCraft and EffectCraft use. cpal = "0.16" notify = "8" pulldown-cmark = { version = "0.13", default-features = false } toml = "1" # Content search over the files on disk before the index is ready (the ripgrep library crates; engine only; owner-approved 2026-10-18). ignore = "0.4" grep-regex = "0.1" grep-searcher = "0.1" # Syntax highlighting for fenced code; pure-Rust regex backend, no onig (owner-approved). syntect = { version = "5", default-features = false, features = ["parsing", "default-syntaxes", "yaml-load", "regex-fancy"] } # SHA-256 of downloaded grammars (pure Rust, RustCrypto; owner-approved 2026-10-18). sha2 = { version = "0.11", default-features = false } # Sync server (apps/notescraft-sync-server only; owner-approved 2026-10-19). axum = { version = "0.8", default-features = false, features = ["http1", "tokio", "json", "query"] } tokio = { version = "1", default-features = false, features = ["rt-multi-thread", "macros", "net", "signal", "time", "sync"] } rusqlite = { version = "0.37", features = ["bundled"] } # Blocking HTTP client with rustls (sync server tests now, the engine sync client next). ureq = { version = "3", default-features = false, features = ["rustls", "json"] } # ed25519 verification of registry entries (owner-approved 2026-10-21, already linked through rustls). ring = { version = "0.17", default-features = false } # Pure-Rust WebAssembly interpreter, same configuration as photocraft-plugins. wasmi = { version = "2.0.0", default-features = false, features = ["std", "validate", "stable", "portable-dispatch"] } wat = "1.228" serde = { version = "1", features = ["derive"] } serde_json = "1" [workspace.lints.rust] unsafe_code = "forbid" [workspace.lints.clippy] pedantic = { level = "warn", priority = -1 } dbg_macro = "warn" todo = "warn" [profile.dev.package."*"] opt-level = 2 [profile.dev] opt-level = 1 # Line tables keep file:line in panic backtraces but drop variable info, which roughly halves link # time and PDB size for the ~260 test binaries (#2204). CI sets the same through # CARGO_PROFILE_DEV_DEBUG. To inspect locals in a debugger, build with CARGO_PROFILE_DEV_DEBUG=true. debug = "line-tables-only" [profile.release] lto = "thin" codegen-units = 1 # Size: owner-approved 2026-10-21 (specs/registry/measurements.md): -8 MB on macOS; crash backtraces lose symbol names. opt-level = "s" strip = "symbols"