{"id":23812968,"url":"https://github.com/devashishdxt/idb","last_synced_at":"2025-06-20T03:36:22.024Z","repository":{"id":50277632,"uuid":"506866823","full_name":"devashishdxt/idb","owner":"devashishdxt","description":"A futures based crate for interacting with IndexedDB on browsers using webassembly.","archived":false,"fork":false,"pushed_at":"2024-10-09T18:46:11.000Z","size":162,"stargazers_count":32,"open_issues_count":3,"forks_count":8,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-05T15:46:09.734Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devashishdxt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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}},"created_at":"2022-06-24T03:36:40.000Z","updated_at":"2025-05-10T04:49:24.000Z","dependencies_parsed_at":"2024-01-16T04:19:44.264Z","dependency_job_id":"ad976d18-ec48-4908-ac27-06c0a11f9fe6","html_url":"https://github.com/devashishdxt/idb","commit_stats":{"total_commits":34,"total_committers":2,"mean_commits":17.0,"dds":0.02941176470588236,"last_synced_commit":"45762491f4d9112d7ce2604e9c0349c217540e9c"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/devashishdxt/idb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devashishdxt%2Fidb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devashishdxt%2Fidb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devashishdxt%2Fidb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devashishdxt%2Fidb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devashishdxt","download_url":"https://codeload.github.com/devashishdxt/idb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devashishdxt%2Fidb/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260873535,"owners_count":23075643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2025-01-02T02:39:06.810Z","updated_at":"2025-06-20T03:36:16.991Z","avatar_url":"https://github.com/devashishdxt.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# idb\n\nA futures based crate for interacting with IndexedDB on browsers using webassembly.\n\n## Usage\n\nTo use `idb`, you need to run following command from your project root:\n\n```sh\ncargo add idb\n```\n\nIf you don't want to use `async`/`await` syntax, you can disable the `futures` feature using:\n\n```sh\ncargo add idb --no-default-features\n```\n\nAfter disabling the `futures` feature, you can use `on_success` and `on_error` methods on requests to attach\ncallbacks.\n\n### Example\n\nTo create a new database, you can use [`Factory::open`]:\n\n```rust\nuse idb::{Database, DatabaseEvent, Error, Factory, IndexParams, KeyPath, ObjectStoreParams};\n\nasync fn create_database() -\u003e Result\u003cDatabase, Error\u003e {\n    // Get a factory instance from global scope\n    let factory = Factory::new()?;\n\n    // Create an open request for the database\n    let mut open_request = factory.open(\"test\", Some(1)).unwrap();\n\n    // Add an upgrade handler for database\n    open_request.on_upgrade_needed(|event| {\n        // Get database instance from event\n        let database = event.database().unwrap();\n\n        // Prepare object store params\n        let mut store_params = ObjectStoreParams::new();\n        store_params.auto_increment(true);\n        store_params.key_path(Some(KeyPath::new_single(\"id\")));\n\n        // Create object store\n        let store = database\n            .create_object_store(\"employees\", store_params)\n            .unwrap();\n\n        // Prepare index params\n        let mut index_params = IndexParams::new();\n        index_params.unique(true);\n\n        // Create index on object store\n        store\n            .create_index(\"email\", KeyPath::new_single(\"email\"), Some(index_params))\n            .unwrap();\n    });\n\n    // `await` open request\n    open_request.await\n}\n```\n\nTo add data to an object store, you can use [`ObjectStore::add`]:\n\n```rust\nuse idb::{Database, Error, TransactionMode};\nuse serde::Serialize;\nuse serde_wasm_bindgen::Serializer;\nuse wasm_bindgen::JsValue;\n\nasync fn add_data(database: \u0026Database) -\u003e Result\u003cJsValue, Error\u003e {\n    // Create a read-write transaction\n    let transaction = database.transaction(\u0026[\"employees\"], TransactionMode::ReadWrite)?;\n\n    // Get the object store\n    let store = transaction.object_store(\"employees\").unwrap();\n\n    // Prepare data to add\n    let employee = serde_json::json!({\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n    });\n\n    // Add data to object store\n    let id = store\n        .add(\n            \u0026employee.serialize(\u0026Serializer::json_compatible()).unwrap(),\n            None,\n        )\n        .unwrap()\n        .await?;\n\n    // Commit the transaction\n    transaction.commit()?.await?;\n\n    Ok(id)\n}\n```\n\nTo get data from an object store, you can use [`ObjectStore::get`]:\n\n```rust\nuse idb::{Database, Error, TransactionMode};\nuse serde_json::Value;\nuse wasm_bindgen::JsValue;\n\nasync fn get_data(database: \u0026Database, id: JsValue) -\u003e Result\u003cOption\u003cValue\u003e, Error\u003e {\n    // Create a read-only transaction\n    let transaction = database\n        .transaction(\u0026[\"employees\"], TransactionMode::ReadOnly)\n        .unwrap();\n\n    // Get the object store\n    let store = transaction.object_store(\"employees\").unwrap();\n\n    // Get the stored data\n    let stored_employee: Option\u003cJsValue\u003e = store.get(id)?.await?;\n\n    // Deserialize the stored data\n    let stored_employee: Option\u003cValue\u003e = stored_employee\n        .map(|stored_employee| serde_wasm_bindgen::from_value(stored_employee).unwrap());\n\n    // Wait for the transaction to complete (alternatively, you can also commit the transaction)\n    transaction.await?;\n\n    Ok(stored_employee)\n}\n```\n\nFor more examples on using other functionality, see the\n[tests](https://github.com/devashishdxt/idb/tree/main/tests) directory.\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))\n- MIT license ([LICENSE-MIT](LICENSE-MIT))\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as\ndefined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevashishdxt%2Fidb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevashishdxt%2Fidb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevashishdxt%2Fidb/lists"}