One geofence layer. Everywhere your product runs.
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 in the map editor or via the API
Sync zones
Mobile SDKs and embedded devices pull zone definitions; server clients reference them by id
Evaluate anywhere
On-device in the mobile and embedded SDKs, or server-side over the REST API for IoT and no-code clients.
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();Prefer to skip the code? Flash one of our reference boards and use it as-is. Browse reference boards →