Overview
The Skylight integration brings maritime surveillance intelligence into EarthRanger. Events detected by Skylight — fishing activity, vessel rendezvous, speed anomalies, area entries and satellite detections — arrive as EarthRanger reports, so your team can monitor, triage and respond without switching platforms.
Each event is enriched with vessel information where available (name, MMSI, IMO, flag state, vessel type). Events involving two vessels, such as rendezvous, carry a second vessel block. Detections where no vessel identity is known arrive with the vessel fields empty — these are untracked or “dark” targets seen by satellite sensors.
Supported event types
| EarthRanger event type | Display title | Skylight source type(s) |
|---|---|---|
fishing_alert_rep |
Fishing | fishing_activity_history |
dark_rendezvous_alert_rep |
Dark Rendezvous | dark_rendezvous |
standard_rendezvous_alert_rep |
Standard Rendezvous | standard_rendezvous |
speed_range_alert_rep |
Speed Range | speed_range |
entry_alert_rep |
Marine Entry | aoi_visit |
detection_alert_rep |
Vessel Detection |
viirs, sar_sentinel1, eo_sentinel2,
eo_landsat_8_9
|
Vessel Detection events come from four satellite sensors — Synthetic Aperture Radar (Sentinel-1), optical imagery (Sentinel-2 and Landsat 8/9) and nighttime lights (VIIRS) — and are distinguished by title: Dark Vessel Detection for unidentified targets, AIS Correlated Vessel Detection for detections matched to a known AIS-transmitting vessel.
How to create these event types
1. Install the command-line tool and sign in
You need a terminal with git and uv installed, and an EarthRanger
account on the target site.
git clone https://github.com/PADAS/earthranger-cli # download the tool's code
cd earthranger-cli # go into the downloaded folder
uv venv # create the virtual environment the next step needs
source .venv/bin/activate # activate it (Windows PowerShell: .venv\Scripts\Activate.ps1)
uv pip install -e . # install it; this gives you the 'er' command
er profile add sitename --server sitename --username you # save the site as a profile ('sitename' is the site's subdomain, e.g. 'grumeti' for grumeti.pamdas.org)
export ER_PROFILE=sitename # tell 'er' to use that profile in this terminal
er auth login # asks for your EarthRanger password and signs you in
Important: the account you log in with must have permissions on the Event Category that will host these event types.
2. Save this spec as skylight.yaml
Set category to the category that should host the Skylight events on this site (for
example analyzer_event or monitoring).
category:
value: analyzer_event
display: Analyzer Event
event_types:
- value: standard_rendezvous_alert_rep
display: Standard Rendezvous
icon_id: skylight-standard-rendezvous_rep
default_priority: amber
auto_resolve: true
resolve_time: 48
ordernum: 1
layout:
label: ''
columns: 1
fields:
- key: vessel_0_category
label: Category
type: string
- key: vessel_0_class
label: Class
type: string
- key: vessel_0_display_country
label: Flag Country
type: string
- key: vessel_0_mmsi
label: MMSI
type: string
- key: vessel_0_name
label: Vessel Name
type: string
- key: vessel_0_length
label: Length (m)
type: number
- key: vessel_0_type
label: Vessel Type
type: string
- key: vessel_0_vessel_id
label: Vessel ID
type: string
- key: event_id
label: Skylight Event ID
type: string
- key: entry_link
label: Skylight Link
type: url
- key: created_at
label: Published At
type: string
- key: updated_at
label: Updated At
type: string
- key: vessel_0_imo
label: IMO
type: number
- key: vessel_0_subcategory
label: Subcategory
type: string
- key: vessel_0_country_filter
label: Flag (ISO3)
type: string
- key: vessel_0_track_id
label: Track ID
type: string
- key: vessel_0_gfw_vessel_id
label: GFW Vessel ID
type: string
- key: vessel_1_vessel_id
label: Vessel 2 Vessel ID
type: string
- key: vessel_1_name
label: Vessel 2 Vessel Name
type: string
- key: vessel_1_mmsi
label: Vessel 2 MMSI
type: number
- key: vessel_1_imo
label: Vessel 2 IMO
type: number
- key: vessel_1_category
label: Vessel 2 Category
type: string
- key: vessel_1_subcategory
label: Vessel 2 Subcategory
type: string
- key: vessel_1_class
label: Vessel 2 Class
type: string
- key: vessel_1_type
label: Vessel 2 Vessel Type
type: string
- key: vessel_1_country_filter
label: Vessel 2 Flag (ISO3)
type: string
- key: vessel_1_display_country
label: Vessel 2 Flag Country
type: string
- key: vessel_1_length
label: Vessel 2 Length (m)
type: number
- key: vessel_1_track_id
label: Vessel 2 Track ID
type: string
- key: vessel_1_gfw_vessel_id
label: Vessel 2 GFW Vessel ID
type: string
- value: dark_rendezvous_alert_rep
display: Dark Rendezvous
icon_id: skylight-dark-rendezvous_rep
default_priority: amber
auto_resolve: true
resolve_time: 48
ordernum: 2
layout:
label: ''
columns: 1
fields:
- key: vessel_0_category
label: Category
type: string
- key: vessel_0_class
label: Class
type: string
- key: vessel_0_display_country
label: Flag Country
type: string
- key: vessel_0_mmsi
label: MMSI
type: string
- key: vessel_0_name
label: Vessel Name
type: string
- key: vessel_0_length
label: Length (m)
type: number
- key: vessel_0_type
label: Vessel Type
type: string
- key: vessel_0_vessel_id
label: Vessel ID
type: string
- key: event_id
label: Skylight Event ID
type: string
- key: entry_link
label: Skylight Link
type: url
- key: created_at
label: Published At
type: string
- key: updated_at
label: Updated At
type: string
- key: vessel_0_imo
label: IMO
type: number
- key: vessel_0_subcategory
label: Subcategory
type: string
- key: vessel_0_country_filter
label: Flag (ISO3)
type: string
- key: vessel_0_track_id
label: Track ID
type: string
- key: vessel_0_gfw_vessel_id
label: GFW Vessel ID
type: string
- key: osr_score
label: OSR Score
type: number
- key: vessel_1_vessel_id
label: Vessel 2 Vessel ID
type: string
- key: vessel_1_name
label: Vessel 2 Vessel Name
type: string
- key: vessel_1_mmsi
label: Vessel 2 MMSI
type: number
- key: vessel_1_imo
label: Vessel 2 IMO
type: number
- key: vessel_1_category
label: Vessel 2 Category
type: string
- key: vessel_1_subcategory
label: Vessel 2 Subcategory
type: string
- key: vessel_1_class
label: Vessel 2 Class
type: string
- key: vessel_1_type
label: Vessel 2 Vessel Type
type: string
- key: vessel_1_country_filter
label: Vessel 2 Flag (ISO3)
type: string
- key: vessel_1_display_country
label: Vessel 2 Flag Country
type: string
- key: vessel_1_length
label: Vessel 2 Length (m)
type: number
- key: vessel_1_track_id
label: Vessel 2 Track ID
type: string
- key: vessel_1_gfw_vessel_id
label: Vessel 2 GFW Vessel ID
type: string
- value: entry_alert_rep
display: Marine Entry
icon_id: skylight-entry_rep
default_priority: amber
auto_resolve: true
resolve_time: 48
ordernum: 3
layout:
label: ''
columns: 1
fields:
- key: entry_speed
label: Entry Speed (kn)
type: string
- key: entry_heading
label: Entry Heading
type: string
- key: vessel_0_category
label: Category
type: string
- key: vessel_0_class
label: Class
type: string
- key: vessel_0_display_country
label: Flag Country
type: string
- key: vessel_0_mmsi
label: MMSI
type: string
- key: vessel_0_name
label: Vessel Name
type: string
- key: vessel_0_length
label: Length (m)
type: number
- key: vessel_0_type
label: Vessel Type
type: string
- key: vessel_0_vessel_id
label: Vessel ID
type: string
- key: event_id
label: Skylight Event ID
type: string
- key: entry_link
label: Skylight Link
type: url
- key: exit_date
label: Exit Date
type: string
- key: duration_in_area
label: Hours In Area
type: string
- key: created_at
label: Published At
type: string
- key: updated_at
label: Updated At
type: string
- key: vessel_0_imo
label: IMO
type: number
- key: vessel_0_subcategory
label: Subcategory
type: string
- key: vessel_0_country_filter
label: Flag (ISO3)
type: string
- key: vessel_0_track_id
label: Track ID
type: string
- key: vessel_0_gfw_vessel_id
label: GFW Vessel ID
type: string
- key: end_heading
label: Exit Heading
type: string
- value: speed_range_alert_rep
display: Speed Range
icon_id: skylight-speed_range
default_priority: amber
auto_resolve: true
resolve_time: 48
ordernum: 4
layout:
label: ''
columns: 1
fields:
- key: average_speed
label: Average Speed (kn)
type: number
- key: distance
label: Distance (nm)
type: number
- key: duration
label: Duration (s)
type: number
- key: vessel_0_category
label: Category
type: string
- key: vessel_0_class
label: Class
type: string
- key: vessel_0_display_country
label: Flag Country
type: string
- key: vessel_0_mmsi
label: MMSI
type: string
- key: vessel_0_name
label: Vessel Name
type: string
- key: vessel_0_length
label: Length (m)
type: number
- key: vessel_0_type
label: Vessel Type
type: string
- key: vessel_0_vessel_id
label: Vessel ID
type: string
- key: event_id
label: Skylight Event ID
type: string
- key: entry_link
label: Skylight Link
type: url
- key: created_at
label: Published At
type: string
- key: updated_at
label: Updated At
type: string
- key: vessel_0_imo
label: IMO
type: number
- key: vessel_0_subcategory
label: Subcategory
type: string
- key: vessel_0_country_filter
label: Flag (ISO3)
type: string
- key: vessel_0_track_id
label: Track ID
type: string
- key: vessel_0_gfw_vessel_id
label: GFW Vessel ID
type: string
- value: detection_alert_rep
display: Vessel Detection
icon_id: skylight-detection-satellite_rep
auto_resolve: true
resolve_time: 48
ordernum: 5
layout:
label: ''
columns: 1
fields:
- key: event_id
label: Skylight Event ID
type: string
- key: image_url
label: Image URL
type: string
- key: correlated
label: AIS Correlated
type: boolean
- key: entry_link
label: Skylight Link
type: url
- key: data_source
label: Sensor
type: string
- key: vessel_0_mmsi
label: MMSI
type: string
- key: vessel_0_name
label: Vessel Name
type: string
- key: vessel_0_type
label: Vessel Type
type: string
- key: vessel_0_class
label: Class
type: string
- key: vessel_0_category
label: Category
type: string
- key: vessel_0_subcategory
label: Subcategory
type: string
- key: vessel_0_country_filter
label: Flag (ISO3)
type: string
- key: vessel_0_display_country
label: Flag Country
type: string
- key: created_at
label: Published At
type: string
- key: updated_at
label: Updated At
type: string
- key: vessel_0_vessel_id
label: Vessel ID
type: string
- key: vessel_0_imo
label: IMO
type: number
- key: vessel_0_length
label: Length (m)
type: number
- key: vessel_0_track_id
label: Track ID
type: string
- key: vessel_0_gfw_vessel_id
label: GFW Vessel ID
type: string
- key: detection_type
label: Detection Type
type: string
- key: score
label: Detection Score
type: number
- key: estimated_length
label: Estimated Length (m)
type: number
- key: estimated_speed_kts
label: Estimated Speed (kn)
type: number
- key: estimated_vessel_category
label: Estimated Vessel Category
type: string
- key: heading
label: Heading
type: number
- key: distance_to_coast_m
label: Distance To Coast (m)
type: number
- key: orientation
label: Orientation
type: number
- key: meters_per_pixel
label: Meters Per Pixel
type: number
- key: frame_ids
label: Frame IDs
type: string
- key: radiance_nw
label: Radiance (nW)
type: number
- value: fishing_alert_rep
display: Fishing
icon_id: skylight-fishing_rep
default_priority: amber
auto_resolve: true
resolve_time: 48
ordernum: 6
layout:
label: ''
columns: 1
fields:
- key: vessel_0_category
label: Category
type: string
- key: vessel_0_class
label: Class
type: string
- key: vessel_0_display_country
label: Flag Country
type: string
- key: vessel_0_mmsi
label: MMSI
type: string
- key: vessel_0_name
label: Vessel Name
type: string
- key: vessel_0_length
label: Length (m)
type: number
- key: vessel_0_type
label: Vessel Type
type: string
- key: vessel_0_vessel_id
label: Vessel ID
type: string
- key: event_id
label: Skylight Event ID
type: string
- key: entry_link
label: Skylight Link
type: url
- key: created_at
label: Published At
type: string
- key: updated_at
label: Updated At
type: string
- key: vessel_0_imo
label: IMO
type: number
- key: vessel_0_subcategory
label: Subcategory
type: string
- key: vessel_0_country_filter
label: Flag (ISO3)
type: string
- key: vessel_0_track_id
label: Track ID
type: string
- key: vessel_0_gfw_vessel_id
label: GFW Vessel ID
type: string
- key: fishing_score
label: Fishing Score
type: number
3. Preview, then apply
er events apply skylight.yaml --dry-run # shows what will be created or changed
er events apply skylight.yaml # actually does it
Applying is safe to repeat: it creates what is missing and patches only what differs. Nothing is ever deleted.
4. Verify
er events show event-type detection_alert_rep
Changelog
September 2026 — expanded vessel and detection fields. These fields were added to
the event types in this revision. Sites that created the Skylight event types before this date can
pick them up by re-running er events apply with the spec above; existing events keep
their stored values.
Added to all six event types: created_at, updated_at,
vessel_0_gfw_vessel_id, vessel_0_imo, vessel_0_track_id.
| Event type | Also added | Retired |
|---|---|---|
| Fishing |
vessel_0_subcategory, vessel_0_country_filter,
fishing_score
|
visit_type |
| Dark Rendezvous |
vessel_0_subcategory, vessel_0_country_filter,
osr_score; the full second-vessel block (13 fields, vessel_1_*)
|
visit_type |
| Standard Rendezvous |
vessel_0_subcategory, vessel_0_country_filter; the full
second-vessel block (13 fields, vessel_1_*)
|
visit_type |
| Speed Range |
vessel_0_subcategory, vessel_0_country_filter
|
visit_type |
| Marine Entry |
vessel_0_subcategory, vessel_0_country_filter,
end_heading
|
visit_type |
| Vessel Detection |
vessel_0_vessel_id, vessel_0_length,
detection_type, score, estimated_length,
estimated_speed_kts, estimated_vessel_category,
heading, distance_to_coast_m, orientation,
meters_per_pixel, frame_ids, radiance_nw
|
visit_type, placeholder
|
Two field types also changed: vessel_0_mmsi became text (to carry the
N/A fallback) and Marine Entry's duration_in_area became text (to carry
Pending). Skylight Link became a URL field so it renders as a clickable
link. The retired fields were never populated by the integration.
CLI tool and full spec documentation: https://github.com/PADAS/earthranger-cli
