{"id":46092809,"url":"https://github.com/bplaat/crates","last_synced_at":"2026-03-05T22:13:17.799Z","repository":{"id":113518386,"uuid":"601991228","full_name":"bplaat/crates","owner":"bplaat","description":"A collection of minimal Rust crates and tools that I created for myself and others","archived":false,"fork":false,"pushed_at":"2026-02-26T20:41:08.000Z","size":10425,"stargazers_count":1,"open_issues_count":38,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-27T00:24:01.052Z","etag":null,"topics":["build-system","rust","sqlite","web-development","webview"],"latest_commit_sha":null,"homepage":"https://crates.bplaat.nl","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bplaat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-02-15T09:10:38.000Z","updated_at":"2026-02-26T18:32:03.000Z","dependencies_parsed_at":"2024-12-18T19:36:27.695Z","dependency_job_id":"ea6d688e-cf3e-4fc1-846d-4683d3cccdfe","html_url":"https://github.com/bplaat/crates","commit_stats":null,"previous_names":["bplaat/crates"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/bplaat/crates","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bplaat%2Fcrates","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bplaat%2Fcrates/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bplaat%2Fcrates/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bplaat%2Fcrates/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bplaat","download_url":"https://codeload.github.com/bplaat/crates/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bplaat%2Fcrates/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29977970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-system","rust","sqlite","web-development","webview"],"created_at":"2026-03-01T18:04:12.438Z","updated_at":"2026-03-01T18:04:12.965Z","avatar_url":"https://github.com/bplaat.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bassie's Rust crates\n\nA collection of minimal Rust crates and tools that I created for myself and others\n\n## Crates\n\n### Published libraries\n\nThese crates are published to [crates.io](https://crates.io) and are more polished and documented\n\n- [bsqlite](lib/bsqlite) A simple and minimal Rust SQLite library with an ergonomic API **([crates.io](https://crates.io/crates/bsqlite))**\n- [bsqlite_derive](lib/bsqlite_derive) The derive macro's for the [bsqlite](lib/bsqlite) crate **([crates.io](https://crates.io/crates/bsqlite_derive))**\n- [simple-useragent](lib/simple-useragent) A simple user agent parser library based on the uap-core regexes **([crates.io](https://crates.io/crates/simple-useragent))**\n- [small-http](lib/small-http) A simple and small HTTP/1.1 server/client library **([crates.io](https://crates.io/crates/small-http))**\n- [small-router](lib/small-router) A simple and small router for the [small-http](lib/small-http) library **([crates.io](https://crates.io/crates/small-router))**\n\n### Libraries\n\nThese libraries are not published to [crates.io](https://crates.io) and are more intended for personal use but can still be useful\n\n- [bwebview](lib/bwebview) A cross-platform webview library for Rust with minimal dependencies\n- [from_derive](lib/from_derive) A FromEnum and FromStruct derive macro library\n- [ini](lib/ini) A simple INI file parser library\n- [js](lib/js) A WIP JavaScript interpreter\n- [openapi-generator](lib/openapi-generator) A simple OpenAPI code generator\n- [pbkdf2](lib/pbkdf2) A unsecure PBKDF2-HMAC-SHA256 password hashing library\n- [small-websocket](lib/small-websocket) A simple and small websocket library for the [small-http](lib/small-http) library\n- [validate](lib/validate) A simple struct validation library\n- [validate_derive](lib/validate_derive) Validation derive macro's library\n\n### Apps\n\nSome desktop apps written with the [bwebview](lib/bwebview) library\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"100\" align=\"center\"\u003e\n    \u003ca href=\"bin/game2048\"\u003e\n        \u003cimg src=\"bin/game2048/docs/images/icon.svg\" alt=\"2048 icon\" width=\"48\" height=\"48\"/\u003e\u003cbr/\u003e\n        2048\n    \u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"100\" align=\"center\"\u003e\n    \u003ca href=\"bin/bassielight\"\u003e\n        \u003cimg src=\"bin/bassielight/docs/images/icon.svg\" alt=\"BassieLight icon\" width=\"48\" height=\"48\"/\u003e\u003cbr/\u003e\n        BassieLight\n    \u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"100\" align=\"center\"\u003e\n    \u003ca href=\"bin/manexplorer\"\u003e\n        \u003cimg src=\"bin/manexplorer/docs/images/icon.svg\" alt=\"ManExplorer icon\" width=\"48\" height=\"48\"/\u003e\u003cbr/\u003e\n        ManExplorer\n    \u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"100\" align=\"center\"\u003e\n    \u003ca href=\"bin/navidrome\"\u003e\n        \u003cimg src=\"bin/navidrome/docs/images/icon.svg\" alt=\"Navidrome icon\" width=\"48\" height=\"48\"/\u003e\u003cbr/\u003e\n        Navidrome\n    \u003c/a\u003e\n\u003c/td\u003e\n\u003ctd width=\"100\" align=\"center\"\u003e\n    \u003ca href=\"bin/sequelexplorer\"\u003e\n        \u003cimg src=\"bin/sequelexplorer/docs/images/icon.svg\" alt=\"Sequel Explorer icon\" width=\"48\" height=\"48\"/\u003e\u003cbr/\u003e\n        Sequel Explorer\n    \u003c/a\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n- [2048](bin/game2048) An offline desktop 2048 game app\n- [BassieLight](bin/bassielight) A simple lights controller with GUI\n- [ManExplorer](bin/manexplorer) A simple man page explorer tool\n- [Navidrome](bin/navidrome) A [music.bplaat.nl](https://music.bplaat.nl/) webview wrapper\n- [Sequel Explorer](bin/sequelexplorer) A simple SQLite database GUI viewer\n\n### Tools / Websites\n\nVarious tools and websites, for the live deployed sites go to [crates.bplaat.nl](https://crates.bplaat.nl/)\n\n- [baksteen](bin/baksteen/) A brick laying robot simulator\n- [bob](bin/bob) A simple build system for my projects, because I like the simplicity of Cargo\n- [cargo-bundle](bin/cargo-bundle) A simple Cargo plugin the builds macOS app bundles\n- [music-dl](bin/music-dl) A tool that downloads complete albums with the correct metadata\n- [plaatnotes](bin/plaatnotes) A simple note-taking app\n- [webhook-puller](bin/webhook-puller) A small service that pulls a Git repo when requested by a webhook\n\n### Replacement libraries\n\nThese libraries are created as minimal / smaller replacements for common used crates\n\n- [anyhow](lib/anyhow) A minimal replacement for the [anyhow](https://crates.io/crates/anyhow) crate\n- [chrono](lib/chrono) A minimal replacement for the [chrono](https://crates.io/crates/chrono) crate\n- [copy_dir](lib/copy_dir) A minimal replacement for the [copy_dir](https://crates.io/crates/copy_dir) crate\n- [directories](lib/directories) A minimal replacement for the [directories](https://crates.io/crates/directories) crate\n- [dotenv](lib/dotenv) A minimal replacement for the [dotenv](https://crates.io/crates/dotenv) crate\n- [enable-ansi-support](lib/enable-ansi-support) A minimal replacement for the [enable-ansi-support](https://crates.io/crates/enable-ansi-support) crate\n- [getrandom](lib/getrandom) A minimal replacement for the [getrandom](https://crates.io/crates/getrandom) crate\n- [libsqlite3-sys](lib/libsqlite3-sys) A minimal replacement for the [libsqlite3-sys](https://crates.io/crates/libsqlite3-sys) crate\n- [local-ip-address](lib/local-ip-address) A minimal replacement for the [local-ip-address](https://crates.io/crates/local-ip-address) crate\n- [mime](lib/mime) A minimal replacement for the [mime](https://crates.io/crates/mime) crate\n- [mime_guess](lib/mime_guess) A minimal replacement for the [mime_guess](https://crates.io/crates/mime_guess) crate\n- [rust-embed](lib/rust-embed) A minimal replacement for the [rust-embed](https://crates.io/crates/rust-embed) crate\n- [rust-embed-impl](lib/rust-embed-impl) A minimal replacement for the [rust-embed-impl](https://crates.io/crates/rust-embed-impl) crate\n- [semver](lib/semver) A minimal replacement for the [semver](https://crates.io/crates/semver) crate\n- [sha1](lib/sha1) A minimal replacement for the [sha1](https://crates.io/crates/sha1) crate\n- [simple_logger](lib/simple_logger) A minimal replacement for the [simple_logger](https://crates.io/crates/simple_logger) crate\n- [terminal_size](lib/terminal_size) A minimal replacement for the [terminal_size](https://crates.io/crates/terminal_size) crate\n- [threadpool](lib/threadpool) A minimal replacement for the [threadpool](https://crates.io/crates/threadpool) crate\n- [url](lib/url) A minimal replacement for the [url](https://crates.io/crates/url) crate\n- [uuid](lib/uuid) A minimal replacement for the [uuid](https://crates.io/crates/uuid) crate\n- [winresource](lib/winresource) A minimal replacement for the [winresource](https://crates.io/crates/winresource) crate\n- [zip](lib/zip) A minimal replacement for the [zip](https://crates.io/crates/zip) crate\n\n## Repo organization\n\nThis repo is organized as a monorepo with `Cargo` as the main build system. My personal vision is that monorepo's work vary well when there's only one main build system, that acts a single organization point for the whole project with all it's submodules.\n\nSo this all Rust code is contained in a single `Cargo` workspace, that builds everything. Some crates have custom build steps that can run other build scripts / systems like `npm` and `vite`.\n\nThe [meta.sh](meta.sh) script is contains all the main tasks, these are used from commandline and also CI. The only modules that use a different build system are the ones in the [bob/examples](bin/bob/examples) directory, but that is also a show case of the [bob](bin/bob) build system.\n\n## Getting Started\n\n- Open a posix shell environment when you are on Windows (e.g. Git Bash)\n- Install [Rust](https://rustup.rs/), [Node.js](https://nodejs.org/), [OpenJDK 21](https://adoptium.net/) and [clang-format](https://clang.llvm.org/docs/ClangFormat.html)\n- Install Rust nightly `rustfmt`, `cargo-binstall`, `cargo-deny` and `cargo-nextest`:\n\n    ```sh\n    rustup toolchain add nightly --component rustfmt\n    curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash\n    cargo binstall -y cargo-deny cargo-nextest\n    ```\n\n- Run checks, or run an example:\n\n    ```sh\n    ./meta.sh check\n    cargo run --bin example-persons-api\n    cargo run --bin example-todo-app\n    ```\n\n### Additional tools\n\n- For coverage reports, install the `llvm-tools` and `cargo-llvm-cov` tool:\n\n    ```sh\n    rustup component add llvm-tools\n    cargo binstall -y cargo-llvm-cov\n    ./meta.sh coverage\n    ```\n\n- To build pages, install a wasm target and the `wasm-bindgen-cli` tool:\n\n    ```sh\n    rustup target add wasm32-unknown-unknown\n    cargo binstall -y wasm-bindgen-cli --version 0.2.104\n    ./meta.sh build-pages\n    ```\n\n- To build macOS app bundles, only on macOS, install targets:\n\n    ```sh\n    rustup target add aarch64-apple-darwin x86_64-apple-darwin\n    ./meta.sh build-bundle\n    ```\n\n- To build and install bins and GUI applications to your system:\n\n    ```sh\n    ./meta.sh install\n    ```\n\n## License\n\nCopyright © 2023-2026 [Bastiaan van der Plaat](https://github.com/bplaat)\n\nLicensed under the [MIT](LICENSE) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbplaat%2Fcrates","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbplaat%2Fcrates","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbplaat%2Fcrates/lists"}