The geofence layer for products that need it.
Same zones run on your mobile app, your IoT device, and your server. Define once. Evaluate anywhere.
$ flutter pub add polyfenceSee it in action
Draw a zone, sync to a device, get events in real-time.
How it works
Draw zones
Define circles and polygons on the map editor or via API
Sync zones
Mobile SDKs and embedded devices pull zone definitions; server clients reference them by id
Evaluate anywhere
On-device in mobile and embedded SDKs, or server-side via POST /v1/evaluate for IoT and no-code
Monitor performance
Real-time analytics on detection speed, battery, accuracy
Privacy by default
Positions stay on the device or in your account. Zone events are the only thing we deliver — never raw coordinates, never identifiers.
Any geometry
Circles and polygons. No shape limits, no zone caps. Model the boundaries you actually need — not what native APIs allow.
Resource-efficient
Adapts to context — battery-smart GPS on phones, lightweight on constrained devices. No always-on drain.
Open source core
MIT licensed. Inspect the engine, audit the algorithms, no vendor lock-in. Build with confidence.
From phones to field sensors
Polyfence works anywhere location matters — mobile apps, embedded hardware, and everything in between.
Fleet & logistics
Know when vehicles enter or leave depots, customer sites, and restricted areas — without streaming GPS to the cloud.
Livestock & agriculture
Monitor grazing boundaries on solar-powered trackers. Lightweight API checks mean you can optimize for battery life — poll on schedule, not continuously.
Asset tracking
Detect when equipment leaves a job site or enters a geo-restricted zone.
Security perimeters
Trigger alerts when devices breach physical boundaries. No cloud dependency, no latency.
Works with your stack
Flutter, React Native, embedded devices, REST API, or CLI. Pick your integration.
# pubspec.yaml
dependencies:
polyfence: ^0.13.0
// main.dart
import 'package:polyfence/polyfence.dart';
await Polyfence.instance.initialize();
final zone = Zone.circle(
id: 'office',
name: 'London Office',
center: PolyfenceLocation(latitude: 51.5074, longitude: -0.1278),
radius: 200,
);
await Polyfence.instance.addZone(zone);
await Polyfence.instance.startTracking();Fleet tracking, livestock monitoring, security perimeters, compliance zones, and more. See use cases →