Forage for All is a community-run map of fruit trees, berries, nuts, and edible plants on public land. Drop a pin. Share what's ripe. Eat from your own neighborhood.
Community apps live or die on trust. Here's ours — in code, not marketing.
No ads, no subscriptions, no paywalls. Food on public land should stay free to find.
Fuzzy locations by default. Reports can be anonymous. No analytics SDKs. No trackers. Ever.
Licensed AGPLv3. Read the code, file issues, send pull requests. If we ever stray, fork us.
Built by foragers for foragers. The map is only as good as the community that tends it.
3,603 seeded pins in Nevada County, CA. Global coverage via 7 open data sources.
Every listing carries a source tag. Toggle data layers on and off in the app — each source shows up as its own pin color, with license and attribution.
People dropping pins right now, coordinates fuzzed to ~110m for privacy.
AGPLv3 · CC BY-SA 4.0 (data)Research-grade plant observations verified by the iNaturalist community.
CC BY-NC 4.0Scientific occurrence records from the Global Biodiversity Information Facility.
CC0 / CC BY 4.0Fruit and nut trees tagged by OpenStreetMap contributors worldwide.
ODbLPublic-land foraging locations from fallingfruit.org.
CC BY-SA 4.0Edible species from SF DataSF, NYC Street Tree Census, and Portland Maps.
PDDL / CC0Three simple moves, repeated by thousands of people, make a living map.
Walk past a fig tree on a public sidewalk? Drop a pin, snap a photo, pick the species. Takes 30 seconds.
Every pin has a ripeness ring that fills as the season progresses. Others confirm throughout the year.
Take what you need. Leave half for the birds and the next forager. Mark "still there" for the community.
A glance at any pin tells you whether it's time to go, wait, or come back next month.
Too early. Don't pick.
Fruit is setting.
A week or two.
Go now.
Wait for next year.
Setting up locally, running the app, contributing.
Web: open the app right now at jphein.github.io/forageforall/app/ — no install needed. Works on desktop and mobile browsers.
Android: grab the latest preview APK from GitHub Releases, enable "Install from unknown sources," and tap to install. The build uses the live InstantDB backend — pins you drop are real.
iOS: store build is in progress; simulator bundle is also attached to each release. App Store submission is on the roadmap.
The whole stack is Expo + InstantDB + Google Maps. You'll need Node 20+, an InstantDB account (free), and a Google Cloud project with Maps SDK enabled.
git clone https://github.com/jphein/forageforall.git
cd forageforall
npm install
cp .env.example .env # fill in INSTANT_APP_ID + Maps keys
npm run schema:push
npm run seed:species
npm run seed:listings # optional: pull open-data pins from iNat, OSM, GBIF
npx expo start # scan QR with Expo Go, or npm run ios/android
Full instructions — including Google Cloud key restriction, EAS build profiles, and CI — are in the repo's README.md.
source; the map renders each as a toggleable layer with license + attributionWe ship ~85 edibles, covering worldwide fruits and nuts plus Sierra Nevada + California natives (manzanita, toyon, bay laurel, valley oak, sugar pine, etc.). Add more by editing scripts/species-data.ts — the single source of truth imported by both seed-species (pushes entities) and seed-listings (links imports + computes ripeness from season). Include accurate latin names, seasonality, and — critically — toxicity and look-alike warnings. Uncited species get reverted.
i18n scaffolding lives in the i18n branch. Pick up any language — we'll review and merge.
Every contributor agrees to reflect these in code, copy, and community moderation:
Foraging laws vary wildly by city, state, and country. We encourage users to only pin on public land, flag private-property finds, and consult local ordinances. We're a map, not a lawyer — but the community actively moderates out protected-land and private-property pins.
We don't. The app is volunteer-built and donation-funded when hosting costs need it. InstantDB + Google Maps have generous free tiers, so running costs are low. If the project ever takes donations, the ledger will be public.
Fuzzy locations are on by default — pins snap to ~110m, not exact GPS. You can also mark pins as private to your account, or opt out of sharing altogether. Critical-habitat species (rare mushrooms, etc.) can be blocklisted by moderators.
Not in the app itself — plant ID is hard to get right, and wrong IDs can poison people. We link out to iNaturalist for identification and require a human to pick the species from our curated catalog before a pin goes live.
Because a hosted service that takes this code, closes it, and runs ads on top of community-contributed data would violate the spirit of the project. AGPL requires that anyone running a modified version as a service also share their source.
Pin finds in your neighborhood. Confirm other people's pins when you walk by. File issues on GitHub. Add species via a PR. Translate. We especially need botanists, regional moderators, and iOS/Android developers.
Free app, open code, living map. Start spotting what's been growing around you all along.