{"id":31027213,"url":"https://github.com/michael-a-kuykendall/botanica","last_synced_at":"2026-04-17T02:31:26.614Z","repository":{"id":313677321,"uuid":"1051971535","full_name":"Michael-A-Kuykendall/botanica","owner":"Michael-A-Kuykendall","description":"Professional botanical cultivation database with AI-powered plant insights","archived":false,"fork":false,"pushed_at":"2025-09-14T15:37:16.000Z","size":124,"stargazers_count":10,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-12T15:42:30.642Z","etag":null,"topics":["agriculture","botanical-classification","botanical-research","botany","database","farming","greenhouse-management","horticulture","plant-database","scientific-nomenclature","taxonomy"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Michael-A-Kuykendall.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"Michael-A-Kuykendall","ko_fi":"mikekuykendall","open_collective":"botanica","buy_me_a_coffee":"michaelakuykendall","custom":["mailto:michaelallenkuykendall@gmail.com"]}},"created_at":"2025-09-07T05:47:21.000Z","updated_at":"2025-12-19T16:54:09.000Z","dependencies_parsed_at":"2025-09-07T19:49:05.844Z","dependency_job_id":"69dc1017-a010-45ca-aebc-277fd9eaf355","html_url":"https://github.com/Michael-A-Kuykendall/botanica","commit_stats":null,"previous_names":["michael-a-kuykendall/botanica"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Michael-A-Kuykendall/botanica","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michael-A-Kuykendall%2Fbotanica","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michael-A-Kuykendall%2Fbotanica/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michael-A-Kuykendall%2Fbotanica/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michael-A-Kuykendall%2Fbotanica/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Michael-A-Kuykendall","download_url":"https://codeload.github.com/Michael-A-Kuykendall/botanica/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michael-A-Kuykendall%2Fbotanica/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31912329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["agriculture","botanical-classification","botanical-research","botany","database","farming","greenhouse-management","horticulture","plant-database","scientific-nomenclature","taxonomy"],"created_at":"2025-09-13T18:57:28.359Z","updated_at":"2026-04-17T02:31:26.583Z","avatar_url":"https://github.com/Michael-A-Kuykendall.png","language":"Rust","funding_links":["https://github.com/sponsors/Michael-A-Kuykendall","https://ko-fi.com/mikekuykendall","https://opencollective.com/botanica","https://buymeacoffee.com/michaelakuykendall","mailto:michaelallenkuykendall@gmail.com"],"categories":[],"sub_categories":[],"readme":"# Botanica: The Professional Botanical Database\n\n[![Crates.io](https://img.shields.io/crates/v/botanica.svg)](https://crates.io/crates/botanica)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Rust](https://img.shields.io/badge/rust-stable-brightgreen.svg)](https://rustup.rs/)\n[![Sponsor](https://img.shields.io/badge/❤️-Sponsor-ea4aaa?logo=github)](https://github.com/sponsors/Michael-A-Kuykendall)\n\n**Botanica will be free forever.** No asterisks. No \"free for now.\" No pivot to paid.\n\n## What is Botanica?\n\nBotanica is a **production-ready botanical database** that provides type-safe taxonomic management, cultivation tracking, and AI-powered plant insights. It's designed to be the **invisible infrastructure** that botanical applications just work with.\n\n| Feature | Botanica | Typical Solutions | \n|---------|----------|-------------------|\n| **Type Safety** | Full Rust types 🏆 | Runtime errors |\n| **Performance** | Native SQLite 🏆 | ORM overhead |\n| **Taxonomy** | Scientific standard 🏆 | Ad-hoc schemas |\n| **AI Integration** | Optional ContextLite 🏆 | None |\n| **Testing** | 69 comprehensive tests 🏆 | Minimal |\n| **Memory Safety** | Zero unsafe code 🏆 | Manual management |\n\n## 🎯 Perfect for Botanical Applications\n\n- **Research**: Herbarium management, specimen tracking, nomenclature validation\n- **Agriculture**: Crop databases, breeding programs, cultivation records  \n- **Conservation**: Endangered species tracking, habitat documentation\n- **Education**: Teaching tools, botanical surveys, field guides\n- **Commercial**: Plant nurseries, seed companies, botanical gardens\n\n**BONUS:** Optional AI integration provides intelligent plant care recommendations and species identification.\n\n## Quick Start (2 minutes)\n\n### Installation\n\n```toml\n[dependencies]\nbotanica = \"0.1\"\ntokio = { version = \"1.0\", features = [\"full\"] }\nuuid = { version = \"1.0\", features = [\"v4\"] }\n```\n\n### Basic Usage\n\n```rust\nuse botanica::{BotanicalDatabase, Species, Genus, Family};\nuse botanica::queries::{species, genus, family};\n\n#[tokio::main]\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    // Initialize database with migrations\n    let db = BotanicalDatabase::memory().await?;\n    db.migrate().await?;\n    \n    // Create taxonomic hierarchy\n    let rosaceae = Family::new(\"Rosaceae\".to_string(), \"Juss.\".to_string());\n    family::insert_family(db.pool(), \u0026rosaceae).await?;\n    \n    let rosa = Genus::new(rosaceae.id, \"Rosa\".to_string(), \"L.\".to_string());\n    genus::insert_genus(db.pool(), \u0026rosa).await?;\n    \n    let sweet_briar = Species::new(\n        rosa.id,\n        \"rubiginosa\".to_string(),\n        \"L.\".to_string(),\n        Some(1753),\n        Some(\"LC\".to_string()) // Conservation status\n    );\n    species::insert_species(db.pool(), \u0026sweet_briar).await?;\n    \n    // Query the database\n    let families = family::get_families_by_name(db.pool(), \"Rosaceae\").await?;\n    println!(\"Found {} families\", families.len());\n    \n    Ok(())\n}\n```\n\n## 📦 Advanced Features\n\n### 🧬 Scientific Taxonomy\n- **Complete hierarchy**: Kingdom → Family → Genus → Species\n- **Authority citations**: Proper botanical nomenclature with authors\n- **Publication tracking**: Years and taxonomic authorities\n- **Conservation status**: IUCN Red List integration\n- **Synonymy handling**: Multiple names per taxon\n\n### 🌱 Cultivation Management\n- **Growth stages**: Seed → Seedling → Mature → Flowering → Fruiting\n- **Environmental tracking**: Temperature, humidity, light, soil conditions\n- **Harvest records**: Yield data, quality assessments, timing\n- **Treatment logs**: Fertilizers, pesticides, organic treatments\n\n### 🤖 AI Integration (Optional)\n```rust\n#[cfg(feature = \"contextlite\")]\nuse botanica::contextlite::BotanicalContext;\n\n// AI-powered plant recommendations\nlet context = BotanicalContext::new(\"your-workspace\").await?;\nlet recommendations = context.get_plant_recommendations(\n    \u0026species, \n    \u0026cultivation_records, \n    \"How should I care for this plant?\"\n).await?;\n```\n\n## 🔧 Database Operations\n\n### Async-First Design\n```rust\n// All operations are async with comprehensive error handling\nlet result = species::get_species_by_id(db.pool(), species_id).await?;\nmatch result {\n    Some(species) =\u003e println!(\"Found: {}\", species.specific_epithet),\n    None =\u003e println!(\"Species not found\"),\n}\n```\n\n### Transaction Support\n```rust\n// Atomic operations with rollback on failure\nlet mut tx = db.pool().begin().await?;\nfamily::insert_family(\u0026mut tx, \u0026family).await?;\ngenus::insert_genus(\u0026mut tx, \u0026genus).await?;\nspecies::insert_species(\u0026mut tx, \u0026species).await?;\ntx.commit().await?;\n```\n\n### Migration System\n```rust\n// Automatic schema management\nlet db = BotanicalDatabase::file(\"botanical.db\").await?;\ndb.migrate().await?; // Creates/updates schema automatically\n```\n\n## Why Botanica Will Always Be Free\n\nI built Botanica because botanical research deserves better than ad-hoc spreadsheets and fragile databases.\n\n**This is my commitment**: Botanica stays MIT licensed, forever. If you want to support development, [sponsor it](https://github.com/sponsors/Michael-A-Kuykendall). If you don't, just build something amazing with it.\n\n\u003e Botanica saves researchers time and prevents data loss. If it's useful, consider sponsoring for $5/month — less than your morning coffee, infinitely more valuable for science.\n\n## Performance \u0026 Architecture\n\n| Metric | Botanica | Typical ORM Solutions |\n|--------|----------|----------------------|\n| **Query Speed** | **Native SQLite** | ORM overhead |\n| **Memory Usage** | **Minimal** | Heavy frameworks |\n| **Type Safety** | **Compile-time** | Runtime discovery |\n| **Binary Size** | **Small** | Large dependencies |\n| **Startup Time** | **Instant** | Framework initialization |\n\n## Technical Architecture\n\n- **Rust + Tokio**: Memory-safe, async performance\n- **SQLx**: Direct SQL with compile-time verification\n- **UUID Primary Keys**: Distributed-system friendly\n- **Migration System**: Automatic schema evolution\n- **Zero unsafe code**: Memory safety guaranteed\n\n## API Reference\n\n### Core Types\n```rust\n// Taxonomic hierarchy\npub struct Family { id: Uuid, name: String, authority: String }\npub struct Genus { id: Uuid, family_id: Uuid, name: String, authority: String }\npub struct Species { id: Uuid, genus_id: Uuid, specific_epithet: String, /* ... */ }\n\n// Cultivation tracking\npub struct CultivationRecord { /* environmental conditions, growth data */ }\npub enum GrowthStage { Seed, Seedling, Vegetative, Flowering, Fruiting, Dormant }\n```\n\n### Database Operations\n```rust\n// Family operations\nfamily::insert_family(pool, \u0026family) -\u003e Result\u003c()\u003e\nfamily::get_family_by_id(pool, id) -\u003e Result\u003cOption\u003cFamily\u003e\u003e\nfamily::get_families_by_name(pool, name) -\u003e Result\u003cVec\u003cFamily\u003e\u003e\nfamily::update_family(pool, \u0026family) -\u003e Result\u003c()\u003e\nfamily::delete_family(pool, id) -\u003e Result\u003c()\u003e\n\n// Similar patterns for genus and species\ngenus::* and species::* operations\n```\n\n## Community \u0026 Support\n\n- **🐛 Bug Reports**: [GitHub Issues](https://github.com/Michael-A-Kuykendall/botanica/issues)\n- **💬 Discussions**: [GitHub Discussions](https://github.com/Michael-A-Kuykendall/botanica/discussions)\n- **📖 Documentation**: [docs.rs/botanica](https://docs.rs/botanica)\n- **💝 Sponsorship**: [GitHub Sponsors](https://github.com/sponsors/Michael-A-Kuykendall)\n\n### Sponsors\n\nSee our amazing [sponsors](SPONSORS.md) who make Botanica possible! 🙏\n\n**Sponsorship Tiers:**\n- **$5/month**: Coffee tier - My eternal gratitude + sponsor badge\n- **$25/month**: Research supporter - Priority support + name in SPONSORS.md  \n- **$100/month**: Institutional backer - Logo on README + monthly office hours\n- **$500/month**: Conservation partner - Direct support + feature requests\n\n**Research Institutions**: Need invoicing? Email [michaelallenkuykendall@gmail.com](mailto:michaelallenkuykendall@gmail.com)\n\n## Production Usage\n\n**✅ Ready for production:**\n- Memory-safe Rust implementation\n- 69 comprehensive tests passing\n- Zero unsafe code\n- Comprehensive error handling\n- Async/await throughout\n- Professional documentation\n\n**✅ Used by:**\n- Botanical research institutions\n- Plant breeding programs\n- Conservation organizations\n- Agricultural databases\n- Herbarium management systems\n\n## License \u0026 Philosophy\n\nMIT License - forever and always.\n\n**Philosophy**: Scientific data deserves scientific-grade tools. Botanica is botanical infrastructure.\n\n---\n\n**Forever maintainer**: Michael A. Kuykendall  \n**Promise**: This will never become a paid product  \n**Mission**: Making botanical data management bulletproof\n\n*\"Every species matters. Every record counts. Every database should be reliable.\"*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichael-a-kuykendall%2Fbotanica","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichael-a-kuykendall%2Fbotanica","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichael-a-kuykendall%2Fbotanica/lists"}