Howler
A production-ready application for tracking and analyzing wolf (Canis lupus) sightings and movements across multiple data sources — with ML-powered behavior prediction.
Features
- Multi-Source Data Integration: Fetch wolf sightings from GBIF, iNaturalist, IUCN, and Movebank
- Advanced Analysis: Pack territory detection (DBSCAN), movement analysis, and temporal pattern detection
- Machine Learning: Behavior prediction (stationary, territorial, linear, random, central-place), next-location forecasting, and activity pattern analysis
- Interactive Maps: Full map capabilities with OpenStreetMap tiles, zoom/pan controls, and multiple layers
- Multiple Interfaces: CLI, TUI (Terminal UI), GUI (Desktop), Web App, and Mobile App
- Data Management: Filter, search, export (CSV, GeoJSON, KML), and import wolf sighting data
- Cross-Platform: Runs on Linux, macOS, Windows, iOS, and Android
Installation
From Source
Using Cargo
Pre-built Binaries
Download pre-built binaries from the Releases page.
Quick Start
CLI
# Fetch wolf sightings from all sources
# Generate a report
# Fetch from specific source
TUI (Terminal UI)
GUI (Desktop)
Web App
Opens at http://localhost:5173 with dashboard, map, analysis, ML predictions, and settings.
Mobile App (React Native / Expo)
Scan the QR code with Expo Go on iOS or Android.
Configuration
Howler uses environment variables for API key configuration:
# Movebank credentials (for GPS tracking data)
# iNaturalist API token (optional — requires 5-month-old account with 10+ observations)
# IUCN API token (optional — register at https://api.iucnredlist.org/users/sign_up)
All sources are optional. Howler works without any API keys — it just uses GBIF (which is free and open).
API Key Acquisition
Movebank:
- Register at movebank.org
- Create an account and request access to studies
- Use your username and password
iNaturalist:
- Register at inaturalist.org
- Go to your account settings and create an API application
- Copy the access token
IUCN:
- Register at api.iucnredlist.org
- Request an API token
- Use the token in your environment
Usage Examples
Fetching Data
# Fetch from all sources
# Fetch specific number of sightings
# Fetch from specific source
Exporting Data
# Export to CSV
# Export to GeoJSON
# Export to KML (Google Earth)
Filtering Data
# Filter by date range
# Filter by source
# Filter by species
Machine Learning
Howler includes an ML module for wolf behavior prediction using random forest classification and linear regression.
Behavior Classification
use ;
let model = new;
let features = from_sightings;
let prediction = model.predict_behavior;
match prediction.behavior_type
Next-Location Prediction
let location_pred = model.predict_next_location;
println!;
Supported Behavior Types
| Type | Description |
|---|---|
Stationary |
Wolf remains in small area (< 1km radius) |
Territorial |
Circular/area-restricted movement |
Linear |
Directed movement (dispersal/migration) |
Random |
No discernible pattern |
CentralPlace |
Activity centered on den site |
Project Structure
howler/
├── howler-core/ # Core library: data models, API clients, ML, analysis
├── howler-cli/ # Command-line interface
├── howler-tui/ # Terminal user interface (Ratatui)
├── howler-gui/ # Desktop GUI (Iced)
├── web-app/ # React + Vite web application
├── mobile-app/ # React Native (Expo) mobile application
├── shared/ # Shared TypeScript types and API client
├── fixtures/ # Test fixtures
├── docs/ # Documentation
└── .github/ # CI/CD workflows
Development
Prerequisites
- Rust 1.70 or later
- Node.js 18+ (for web/mobile apps)
- Expo CLI (for mobile app)
Building
# Build all Rust crates
# Build web app
&& &&
# Build mobile app
&& &&
Testing
# Run all Rust tests
# Run with coverage
Code Quality
# Format
# Lint
Contributing
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
cargo test --all-features --workspace) - Run linters (
cargo fmt && cargo clippy -D warnings) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under either of:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
Data Sources
- GBIF: Global Biodiversity Information Facility - https://www.gbif.org
- iNaturalist: Citizen science observations - https://www.inaturalist.org
- IUCN: International Union for Conservation of Nature - https://www.iucnredlist.org
- Movebank: Animal tracking data - https://www.movebank.org
Acknowledgments
- GBIF for providing occurrence data
- iNaturalist for citizen science observations
- IUCN for conservation status data
- Movebank for GPS tracking data
- The Rust community for excellent tools and libraries
- linfa for machine learning primitives
Support
- Issues: GitHub Issues
- Documentation: docs/
- Discussions: GitHub Discussions
Roadmap
Completed
- Multi-source data integration (GBIF, iNaturalist, IUCN, Movebank)
- DBSCAN territory detection
- Movement and temporal analysis
- CLI, TUI, and GUI interfaces
- Data export (CSV, GeoJSON, KML) and import
- Machine learning for behavior prediction
- Web application (React + Vite)
- Mobile application (React Native / Expo)
- Real-time data streaming (WebSocket + Axum server)
- Multi-user collaboration (auth, annotations, ratings)
- Offline map tiles for mobile
- Auto-fetch on network connectivity
Maps
- Real map tiles for web app (Leaflet / MapLibre)
- Map layers (satellite, terrain, topographic)
- Territory boundary drawing and editing tools
- Heatmap visualization for sighting density
Data
- Photo attachments for sightings
- Weather data integration (precipitation, temperature at sighting location)
- Historical comparison (year-over-year trends)
- CSV/GeoJSON/KML export from web and mobile apps
Machine Learning
- Species identification from photos
- Population density modeling
- Migration pattern forecasting
- Anomaly detection for unusual sighting patterns
User Experience
- Push notifications for new sightings in area
- Field data collection mode (offline-first, sync later)
- Onboarding tutorial for new users
- PDF report export
- Dark mode for mobile app
- Accessibility improvements (screen reader, contrast)
Infrastructure
- Docker setup for easy deployment
- Database migrations system
- API rate limiting and caching layer
- Structured logging and monitoring
- Error tracking and reporting
Social
- Data sharing between users / public feed
- Comments and discussion on sightings
- User profiles and contribution tracking
- Share sightings to social media