What Strażnik is
A server collects data from several public sources, calculates a score for every province and sends notifications. The app shows the map, the source of every point and the last 12 hours of history. You need neither an account nor your own server.
The score is an app indicator, not a probability of impact. No single article or zone raises the level on its own — the threshold is reached only by an official message, a serious object close to the border, or several independent sources at once.
1. Installation and updates
- iPhone: get Strażnik from the App Store and read the iPhone guide — the steps below are for Android only.
- Android — the easy way: install Strażnik from Google Play (Poland and the rest of Europe). Updates then come through the store, and you can skip the next steps of this list — only the last one remains.
- Without Google Play: download the latest Straznik.apk to your Android phone.
- Open the file from Downloads. If Android asks, allow the browser or file manager to install apps from this source.
- Confirm the installation and open Strażnik. Let the system scan the file — do not turn off Play Protect.
- Allow notifications and save your province in Menu → Settings → My places.
The “Install unknown apps” permission — and how to revoke it
Already have Strażnik from the APK file? You can install the Google Play version over it — both are signed with the same key, so your settings and My places stay.
When you install from the APK file, Android installs it only after the app that opens the file — usually Chrome — is granted Install unknown apps. The browser interrupts the installation and sends you to the Allow from this source switch. This is a normal step, not an error.
The permission applies only to that one app, but it stays on until you turn it off. It is worth revoking after installation:
- Settings → Apps → Special app access → Install unknown apps.
- Pick the app you opened the file with (usually Chrome, marked “Allowed”).
- Turn Allow from this source off.
Faster: search unknown in Settings. The wording varies slightly between Android versions and manufacturers, but the path is the same. Strażnik works normally with the permission revoked; the next update will ask for it again.
If the GitHub app intercepts the link and the download stalls, open the link in your browser. There is also a copy of the APK in the repository.
Updating from inside the app
The store updates the Google Play version — it has no update button. The following applies to the APK version.
Strażnik checks for a new release at every launch and whenever it returns to the foreground (at most every 30 minutes). The update window shows the version number and the list of changes. Manually: Menu → Settings → Language, text and version → ⬆ Check for updates.
For an ordinary update you can choose Later. When you install, the app downloads the file, verifies its SHA-256 checksum and hands it to Android for confirmation. Install the new release over the old one — settings and My places are kept.

2. First steps: My places, notifications, language
My places
Menu → Settings → My places → Open My places. You can save up to 8 places, e.g. Home, Work, Trip. For each you choose a province and tick Watch alerts for this province. Notifications arrive for watched provinces; several places in one province make one subscription. The first place defines “my region” on the map.
A place can also be exact: tapping ◎ Read location once stores a one-off point and its accuracy. There is no background tracking. While the app is open, Strażnik then calculates on the phone the distance to visible objects. Notifications are still sent per province.
Place data stays on the device — the button is called Save on device.







Android permissions
The Alerts and permissions section shows whether notifications are ready and for which region. If you only want to watch the map, turn off Alerts on this phone — the phone is unsubscribed from every province and stops receiving alert notifications and permission reminders. The status above the switch shows how many provinces the phone is subscribed to (confirmed by Firebase). Android permissions stay as they are — the app cannot change them. The permission warning on the map can also be closed with its cross. The buttons lead straight to system settings: Notification settings, Check full-screen alert permission and Disable battery optimisation. Android 14 and later may revoke the full-screen permission after an update — check it yourself. A fourth button, Alert despite Do Not Disturb, appears only while that permission has not been granted; it is optional and described below, with Do Not Disturb.
Polski / English
Menu → Settings → Language, text and version → Interface language. After choosing, tap Change language and restart — the app restarts in the new language. Until you choose one, the app follows the phone language: Polish and Ukrainian as they are, any other language — English (the website defaults to Polish). The English version covers the interface, object descriptions and map labels; quoted messages and article titles stay in the original language.
Text size
Menu → Settings → Language, text and version → Text size: Normal, Larger or Largest. It applies at once, with no saving and no restart. Every piece of text grows together — the panel, the object cards, the legend, the alert screen and the GROTA module. Spacing and buttons keep their size, so the layout holds and nothing runs off the screen.
On Android this setting multiplies with the system font size (Settings → Display → Font size), so with a large system font “Normal” is usually enough. Labels on the map itself come from the map server and this setting does not change them. On the website ordinary browser zoom (Ctrl and +) works as well. On iPhone it is the other way round: the system text size (Settings → Display & Brightness → Text Size) does not change the text in Strażnik — the system web view follows Dynamic Type only when a page explicitly asks for it, and ours does not. On iPhone this setting is therefore the only way to get larger text.
3. The main screen
The layout has five areas: the bar at the top with the source indicators and the counter, the (i) sign in the top-left corner of the map, the tiles along the right edge of the map, the my region banner and the floating bottom bar.
| Element | What it does |
|---|---|
| STRAŻNIK and six indicators | The indicators are sources: NEPTUN, UA alerts, ADS-B, RSS, RCB/RSO, PAŻP. Green — the source responds; red — it does not. The RCB/RSO indicator shows the Regional Warning System that carries official RCB alerts; it is green only when RSO has responded in the last few minutes. Tapping the indicators opens the source descriptions; tapping the name opens “About”. A green indicator means a working source, not the absence of a threat. |
| Drone and missile counter | How many drones (including Shaheds and reconnaissance drones) and how many missiles (cruise, ballistic and KAB glide bombs) are on the map right now — exactly as many as there are icons. FPV, MiG-31K and unidentified objects are not counted; zero is dimmed. The number can suddenly drop by half: the source removes objects in whole batches a few minutes after their last confirmation, so a drop does not have to mean the attack is over. Tapping it opens an explanation. The counter is not a warning for a province — points and notifications are. In History it shows the moment chosen with the slider. |
| (i) sign on the map | The Map sources box: where the objects come from (NEPTUN, ADS-B) and the base map (OpenFreeMap © OpenMapTiles © OpenStreetMap). At start it opens by itself and folds away after a few seconds or when you touch the map. |
| my region | Frames the map on the first saved place. |
| zones | Turns the PAŻP zone layer on and off. A dimmed tile means the layer is off. |
| whole PL | Shows Poland together with Ukraine. |
| Banner above the bottom bar | Your region, its level and points, e.g. “Lubelskie — below threshold 1.1 pts”. Tapping it opens the province card. |
| Bottom bar: Map Signals GROTA History Menu | Map returns to the main view; Signals opens the panel; GROTA — nearest places of shelter (app only, chapter 9); History scrolls through 12 hours; Menu opens the list below. |
| Menu | Settings (Alerts and permissions, My places, Sound and quiet hours, Map, Language, text and version), Notifications (in the app — turning them on or muting them; on the website — browser notifications, chapter 10), Legend of symbols and colours, 3D view (the height of a province block grows with its points — also below the threshold), Foreign aircraft (RU/BY) (chapter 8), About and scoring, User guide and Support the author (the last one is not in the Google Play version). |
Settings open with a readiness card — whether an alert will reach you and what is still missing — with the five sections below it. Most changes are saved immediately, without “Save” and “Cancel” buttons; only the language and the address of your own server need a restart, with a button in their section, and the My places editor has its own Save on device button. Every window opened from the Menu — Settings, About, Foreign aircraft, Legend — has a ‹ Menu button at the top, next to “Close”, that takes you back to the Menu; the system “back” does the same on the Settings start screen. Settings sections and the My places window have ‹ Settings at the top. With large text the button sits just below “Close”.
At start a bar “UNOFFICIAL additional source…” appears at the bottom. You can close it with the cross — it comes back during an alert. Close panels and windows with the cross, the Map tab or a tap beside them. When you open the Signals panel or the history, the map moves up over the uncovered part of the screen so objects do not hide under the panel, and goes back when you close it.
4. The map, objects and aircraft
Drag the map with a finger, zoom with two fingers and tap objects. A province's colour shows its points from the last 60 minutes:
| Colour | Meaning |
|---|---|
| navy | 0–1.9 pts — calm (below threshold) |
| yellow | from 2 pts — elevated attention |
| red | from 4 pts and a confirmation — high priority (chapter 11) |
| dimmed, olive | colour from neighbouring provinces only; the card has a dashed border and says “raised by neighbours · no alert here”. Such a colour sends no notification. |
NEPTUN objects over Ukraine have distinct shapes — the legend shows each one:
| Object | Symbol |
|---|---|
| Drone / UAV | yellow silhouette with straight wings and a notched tail; a red nose and a red arrowhead ahead of it show the direction of flight |
| Shahed drone | orange delta wing |
| FPV drone | four rotors; local, no points |
| Reconnaissance drone | white-grey silhouette with long wings |
| Cruise missile | red body with wings |
| Ballistic missile | slim pink tip |
| KAB guided bomb | yellow bomb silhouette |
| MiG-31K (carrier) | purple aircraft |
| Unidentified object | grey diamond with a question mark |
Unknown heading: the icon is not rotated and has a dashed white ring and a question mark — it does not indicate a direction. A drone reported only with a target (“flying towards: …”) looks the same: since 1.8.03 its icon is not rotated, because the angle given by NEPTUN does not come from the report. Only objects that currently add points to a province get a pulsing red ring; the others stay still.
Uncertain position: a drone whose position comes from a “heading towards …” report or a town centre, rather than a fix, keeps the colour of its type but has a dimmed fill and a dashed outline. Such objects weigh 60% of a confirmed one in the points (a town centre 50%). On 19 October around Lviv, 11 of 16 tracks were such reports — several icons next to each other are often one object described by several channels.
A pink-highlighted Ukrainian oblast with a dashed outline has an air-raid alert that currently adds points to a province. Nearer oblasts are clearer, distant ones barely visible. Tapping the oblast shows when the signal arrived and how many points it gives to which province.
The circle around an object shows where the object may be — not a blast radius. By default only the tapped object and objects with a confirmed position within 50 km of the Polish border have a circle — there it tells whether the object may already be over Poland; further away and for uncertain positions the circles merged into one blot. In Menu → Settings → Map → “Uncertainty circles” you can choose Selected and near the border, All or Off; every object’s radius is also on its card. Tapping an object makes its circle clear and thicker while the circles of other objects fade — with several drones side by side you can see which circle belongs to which. It combines the uncertainty of the report itself with the distance the object could have flown since the last report, so it grows until a new report arrives — for at most 15 minutes, after which it stops growing and the object card says so. The card splits the number into both parts. Missiles, glide bombs and ballistic objects keep a fixed area, because the source gives them no heading. The dashed line is the flight path — drawn only when the source gives positions suitable for tracking. In Menu → Settings → Map → “Object tracks” you choose separately for drones and missiles and for aircraft: off, flown track or track and heading (a line covering 30 minutes of drone or missile flight, 15 minutes for aircraft, with dots every 5 minutes). The heading of drones and missiles is drawn only for a heading measured from the object's movement. An object with an approximate position (large uncertainty circle) has neither a track nor a heading — and most NEPTUN objects stay put between reports, so lines appear only for some of them. Blue aircraft and helicopters are military aviation with a public ADS-B transponder. An object whose position the source derived from its target and heading, rather than observed, gets a circle of at least 40 km, and the card says it may be anywhere along the route. The circle grows the same way in the history view — from the age of the report at the chosen moment.
The time under an icon (for example “7 min”) is the age of the last report about that object. NEPTUN collects human reports, not radar returns: an object stays where it was until someone reports it again, and sometimes no further report arrives. The label appears after five minutes and the icon fades gradually — the paler it is, the older the information. After an hour the icon is clearly faded. Motionless icons therefore mean no new reports, not a frozen map. The object card shows a last report line, and past a quarter of an hour it adds that the object may have moved on since.
The legend opens from the first icon at the top and closes with the ✕ Close button in its header. Its six groups expand one at a time — you see every group name at once, so finding one symbol takes no scrolling.

Object and aircraft cards
Tapping an object opens a mini card in the bottom-left corner and puts a white ring around the object on the map. The arrow button (Expand card) enlarges it to most of the screen and collapses it again; the cross closes it.
A drone or missile card shows the type, reported area, number of confirmations, confidence, the area where it may be, heading and distance from the Polish border. Time to arrival (ETA) appears only for positions suitable for such a calculation. When the source marks the position as a report area, the card says “approximate report area — no confirmed route or arrival time” and the distance is an estimate. When the report gives only a target (“flying towards: …”), the card shows a “nominal position” badge and one block: What was reported, Position (the icon sits at a nominal point in front of the target), Heading (unknown — the angle comes from NEPTUN, not from the report), Poland (whether the object counts towards the score) and Arrival time (not estimated). A heading towards Poland that misses the nearest part of the border by more than 50° is described as “towards a farther part of the border”. Object illustrations are AI-generated references and must not be used to identify a model.
Below the name the card shows a “confirmed position” badge (a fix from the source) or “uncertain position”, and a drone reported only with a target — “nominal position”. At the bottom, “Points now” shows how many points the object is adding to each province right now. When it adds nothing to a province, the card says why: the NEPTUN limit there (8 points) is already full, or the same point is already counted from another report. In the history view these are the points from the selected moment.
An aircraft or helicopter card shows the callsign, registration, country, model, role, altitude, speed and heading. The photo shows an example aircraft of that model — the author, source and licence are below it. 📍 follow track draws the flight trail. The signal row says where the position came from: ADS-B is reported by the aircraft itself, while MLAT is computed by ground receivers from signal time differences — outside their coverage, over Belarus for example, it can be tens of kilometres off, and the card says so. Altitude, speed and heading come from the aircraft in both cases. When a report would require an impossible jump — the aircraft could not cover that distance in that time — Strażnik does not move the icon: it stays at the last credible position, the leg is not added to the trail, and the card says so. The map does not show aircraft with the transponder switched off.
5. PAŻP zones on the map
The zones tile shows active airspace zones from the daily plan of the Polish Air Navigation Services Agency (PAŻP). A zone that has been standing for a long time, or was already active when watching started, has a quiet purple outline. A zone switched on recently, while Strażnik was watching, is yellow and has a 3D block.
Tapping a zone opens its description: the type and what it means, since when Strażnik has seen it, reserved until (the end of today's slot in the daily plan — a zone can be renewed) and the altitude band. The button with the province name leads to its card, because a province fully covered by a zone is hard to tap on the map.
Overlapping zones: a tap opens the smallest zone under your finger, and the others at that spot are listed as “Other zones at this spot” buttons.
The zone layer itself adds no points. Only a rare D, R, NPZ or ADHOC zone scores — the rules are in the zone scoring section.

6. The signals panel
The Signals tab opens the province cards. Your region comes first and is labelled “my region”. Each card shows the points, the level, an “adds up to” summary (e.g. “0.9 ALARM UA”) and the PAŻP zones over the province. Tapping a card expands its list of signals, and tapping again collapses it — the same in history mode.
Each signal row shows the source, its contribution in points, the title (an article opens as a link), the signal's age and its weight. A signal keeps full weight for 30 minutes and then loses it until zero at 60 minutes — the “weight 64%” note means exactly that. A struck-through number is the nominal value that was not counted because the signal is fading or the source class has reached its cap. The numbers in the summary are rounded one by one, so their sum may differ from the score by 0.1.
A signal without points stays visible with an explanation:
- Repeated official alert — an article that only talks about an RCB alert (names RCB, “alert for…”, quotes the alert) when an RCB or RSO alert for any province arrived up to 4 hours earlier. An article with information beyond the alert keeps its points: a drone over Poland, an airspace violation, an explosion, debris, sirens, a search. An article about the end of the threat (“no threat”) also scores nothing (since 1.7.99).
- Historical report / aftermath — an anniversary, a trial, rebuilding.
- Cancelled by RCB and After RCB cancellation — an alert RCB cancelled, and articles about it.
- The RCB alert has not been cancelled yet — an RCB alert stands until it is cancelled, and the cancellation can come hours later. Our own signals expire long before that and the map looks calm, so this entry says plainly that the alert is officially still in force. It disappears when the alert is cancelled, when its RSO entry expires (RCB often ends an alert this way, without a separate cancellation) or after twelve hours. When the alert expires at the end of its validity without a cancellation, for one hour it is replaced by “The RCB alert issued at 09:30 expired at 10:59 (not cancelled)” — so it does not vanish without a word.
- Report on an earlier event — the server read the article and it describes something more than an hour old.
- Article could not be read — no points — the text could not be fetched; the link stays.
A NEIGHBOURS entry is points spilling over from a neighbouring province (chapter 11).

Further down the panel has two observation lists without points: Objects ≤ 250 km from the border (NEPTUN) and Military aviation (ADS-B) over eastern Poland. This is public transponder data, not tracking of hostile aircraft. It comes from the free, open aggregator adsb.lol (ODbL licence): the server queries it, and in emergency mode, when the phone scores on its own, the phone does. When adsb.lol does not respond, the layer stays empty. The layer is informational and gives no points. Where available, the province card also offers Cameras in the region — road cameras, not a tool for detecting airborne objects. Since 1.7.88 this is a plain list with links: the preview is not shown here, because the worldcam.pl terms do not allow it. Tapping a tile opens the camera at the source.
7. 12-hour history
The History tab opens the history view. The slider track is coloured by the level at each moment, so you can see at a glance when something happened. Drag the handle: the map, colours, objects and aircraft show the chosen moment, and the label gives the time and the number of minutes back. Below the slider are the highest-scoring province at that moment, the number of drones, missiles and aircraft in the snapshot, and a “N signals in the window” link that opens the panel for that moment.
The 12-hour chart (from 1.7.95) sits above the slider on the same time axis: the number of drones as a 30-minute average over the raw bars, and missiles and KAB bombs as red dots at the bottom. By default it is collapsed to a single row with the maximum — tap it to expand; the app remembers your choice. Next to the slider mark you see the average for that moment, and tapping the chart moves the slider there. The chart counts the same as the counter in the top bar, so drops usually mean the source removed a batch of objects, not that the attack is over.
Below the slider is a row of buttons: −12 h (start), alert back (start of the previous alert), −10 and −1 minutes, ▶ play and pause, +1 and +10 minutes, alert forward (next alert) and end (latest snapshot). Holding ±1 and ±10 keeps scrolling. On a narrow screen or with large text the labels under the buttons are hidden and only the icons remain. ×1 in the header switches playback speed to ×2 and ×4.
Since 10 October 2026 the history view shows PAŻP zones as they were at that moment: every snapshot records which zones were in force, so you also see zones later lifted from the list and those opened during an incident — PAŻP replaces the whole set once a day at 6:00. Before that, zones were hidden in history, because the slider would have drawn today's zones over a situation from hours earlier. Moments from before this change have no record: zones are then hidden, the zones button disappears and the history panel says so explicitly.
In history mode the panel is headed HISTORY VIEW, and signal times count from the chosen moment (“36 min earlier”). LIVE in the bar header, the Map tab or the system back button restores the current view.
History is downloaded to the device once and scrolling runs locally, without a server request for every finger movement. Snapshots are usually taken every minute — this replays stored samples, not a continuous recording.


8. Foreign aircraft over the eastern flank
The aircraft icon at the top opens a list of military aircraft with Russian or Belarusian registration visible in public ADS-B/MLAT data over the eastern flank. The panel has two parts: currently in range and a log — entered / disappeared from range covering the last 12 hours, including time when the app was closed.
In history mode the panel follows the chosen moment. A dimmed aircraft on the map is its last recorded position from at most 2.5 minutes earlier. “Disappeared” means the signal was lost in the data, not a landing or a shoot-down. These observations add no points, and an empty list does not mean empty skies — many aircraft fly with the transponder off.

9. Alerts and notifications
| Level | What happens |
|---|---|
| below 2 pts | Information on the map and in the panel, no notification. |
| yellow, from 2 pts — ELEVATED ATTENTION | A notification and a short attention sound at normal notification volume. It respects silent mode and Do Not Disturb. |
| red, from 4 pts and a confirmation — HIGH PRIORITY | Siren, vibration and a full-screen alert where the system allows it. The siren loops until you tap ACKNOWLEDGE on the alert screen or Wycisz alarm in the notification — for at most 15 minutes. The “Alarms” volume is raised to at least half; with the full-volume option on — to maximum. The previous volume returns after silencing. On Android, Menu → Settings → Sound and quiet hours → Red alert lets you choose Siren (default), Vibration only (the full screen and flashing stay) or Regular notification (banner, short sound and vibration, no full screen and no Do Not Disturb bypass). |
When the phone rings and when it does not
- Notifications arrive only for watched provinces from My places.
- The province needs at least 1 point from its own signals. Colour from neighbours alone does not ring.
- Spillover from neighbours can close a threshold by one step at most: own points below yellow plus a neighbour give yellow at most.
- No repeats: if the score drops and crosses the same threshold again within 60 minutes of a notification, only the map changes. Exception: a new Alert RCB/RSO. Moving up a level, from yellow to red, always notifies.
- In the open app, sound follows the same rules as notifications, not the map colour — for every watched province, not only the first place.
- A notification delayed by more than 10 minutes (for example after coverage returns) is shown silently with “delayed by … min”.
- The notification text starts with the time it was sent (“10:54 · …”) — the moment the server judged there was a threat, not the moment the message arrived. The same time appears in the notification's own clock and on the full-screen alert.
- 10-minute hold: when the score falls below the threshold, the level and colour stay for another 10 minutes after it was last exceeded, so they do not flicker when the score hovers around 2 pts. The province card then says “held until …”, and history shows the same as the live map. An RCB all-clear lifts the hold at once. Points are a different matter: a signal counts in full for 30 minutes and fades over the next 30 — even when the object is no longer on the map.
- When the app is open, the alert shows inside it and a silent notification stays in the shade. It is not a duplicate: without it Google treats urgent messages as unnecessary and may delay the next ones by a minute or more. Menu → Settings → Alerts and permissions shows, next to the time of the last signal, how long it took and whether Google lowered its priority.
Menu → Settings → Sound and quiet hours offers ▶ Test: attention, ▶ Test: siren and ▶ Test: full alert. These tests run inside the app window. The Android app also has ▶ Test: red native and ▶ Test: yellow native: after 5 seconds a real notification with the siren or attention sound arrives, so you can lock the screen and check the alert above the lock screen. No test checks push delivery from the server.
Alerts arrive in Polish. The notification text — the title, what to do and the reasons — is written by the server in Polish, whatever language you choose in the app. The level and the province name are easy to recognise, and the details are in the app in your language.
Red alert volume
The siren uses the Android “Alarms” volume, not “Ring” or “Media”. A red alert raises it to at least half. The Red alert always at full volume switch is off by default; once you deliberately switch it on (the app asks for confirmation), the siren plays at maximum, also at night. The current level is shown in the same tab, and Android sound settings opens the system volume controls. In the app, the bell at the top opens the notification status.
Vibration and watches
The vibration speaks Morse code: yellow is “U” (· · —, for Urgent), red is “A” (· —, for Alarm), repeated. If you do not know Morse, you will recognise them by rhythm: two short and a long one is yellow, a short and a long one is red — neither can be mistaken for an ordinary text message. The notification, the open app and the website in Chrome on Android use the same pattern. The ▶ Feel: yellow (U) and ▶ Feel: red (A) buttons in the Sound and quiet hours section only play these patterns — they do not choose anything. In the Android app (from 1.7.94) they vibrate like the real signal: yellow like a notification, so it stays still in silent mode and the app tells you why; red like an alarm, silent mode included. If you turn off a channel's vibration in Android notification settings, the app tells you that too. On the website in Chrome the browser does the vibrating, and it does not vibrate in silent mode. iPhone has no custom vibration patterns — iOS does not allow them.
Watches and bands. From version 1.7.93 the red alert also reaches a paired Wear OS watch — Android did not forward it before. Bands and watches with their own app (e.g. Mi Fitness, Zepp, Garmin Connect, Galaxy Wearable) show it if you allow Strażnik in their notification settings. The watch vibrates in its own way, so you will usually not feel the “U” and “A” rhythm on your wrist. We have not checked every model — test yours with ▶ Test: red native.
The yellow sound wakes you at night — what to do
Menu → Settings → Sound and quiet hours has Attention sound volume (yellow) with three settings: Normal, Quieter (about ten times quieter) and No sound (the banner and the vibration remain). It applies to yellow only. Red has its own Red alert choice (Android only): Siren (default), Vibration only — the siren alone goes quiet, while the vibration, the full screen and the flashing stay — or Regular notification — red arrives like yellow: a banner, a short sound and vibration, no full screen, and in Do Not Disturb it may not reach you. For both quieter modes the app asks for confirmation, because with the screen off and the phone in another room you may not notice an alert like that. The full-volume option is then inactive (there is nothing to turn up); to hear the siren itself use Test: siren. iPhone does not have this choice: iOS does not allow a single kind of notification to be silenced. On Android the setting works both with the app open and with the screen off, because yellow then goes to a separate notification channel. On iPhone it changes only the sound inside the open app: the volume of a push notification is chosen by the system and the app cannot affect it.
Quiet hours (Android, from 1.7.95)
If you want to hear alerts during the day but vibration is enough at night, you no longer have to switch anything every evening. In Menu → Settings → Sound and quiet hours turn on Quiet hours and choose the time: From … to (22:00–07:00 by default; the window may span midnight). During these hours yellow arrives without sound — the banner and vibration stay. For red you choose Red during quiet hours: Vibration only (default) — the siren goes quiet while the full screen and strong vibration stay — or Unchanged, i.e. as set above for the red alert.
Quiet hours never make an alert louder: if red normally uses vibration only or a normal notification, that stays. Outside the chosen hours everything works as usual. The hours follow the phone's clock, and the setting works both with the app open and with the screen off — during quiet hours notifications go through separate, quiet channels. We checked this on a Pixel emulator, not yet at night on a real alert. A phone lying in another room may vibrate without you noticing. iPhone has no quiet hours — there the notification sound is set by the server.
A second way, available in the system right now: turn on Do Not Disturb at night. We measured this on Android 14 — ordinary Do Not Disturb silences yellow while red gets through: the siren plays, the screen lights up and the full-screen alert appears above the lock screen. On iPhone the same is done by a Focus mode (for example Sleep): red is marked as a time-sensitive notification and breaks through, yellow does not.
One condition on Android: red gets through because Do Not Disturb allows alarms by default. If you turn Alarms off under Settings → Do Not Disturb → Alarms & other interruptions, the siren goes quiet and the screen stays dark — we measured this separately. Leave Alarms on; it does not affect yellow, which is not an alarm and is silenced either way.
How it works technically: the server sends push notifications through Firebase for every watched province, also when the app is closed and the screen is locked. Alerts also arrive after an overnight phone restart, before you unlock it. “Force stop” in Android settings — and on some Xiaomi, Huawei or Oppo phones also clearing the app from recent apps — blocks delivery until the app is opened again; settings warn about this on such phones. A separate trap is the manufacturer's skin putting the app to sleep: on Samsung phones the “sleeping apps” and “deep sleeping apps” lists can stop push delivery entirely, despite enabled notifications and a working connection — because it is a separate setting. From version 1.7.91 Strażnik warns about this in settings when it detects a battery restriction on such a phone, and shows the time of the last signal received from the server. Fallback mode: when the server does not respond, the open app starts a built-in engine and polls the sources itself; it checks every minute whether the server is back. Fallback mode works only while the app is open and does not read press article texts, so media are listed without points; it does read the RCB message on gov.pl, exactly as the server does.
Where to shelter — GROTA
After you tap ACKNOWLEDGE — silence alert the siren stops and the alert screen shows three buttons: Where to shelter, Watch the map and I'm in a safe place. Strażnik never switches the screen on its own — you choose. The ACKNOWLEDGE button sits right below the heading; below it are a one-sentence “What to do” and at most three reasons — the full list of signals is in the panel. After 15 minutes the siren, vibration and screen flashing stop on their own — to spare the battery and keep the phone from heating up — and the screen stays with the note “Silenced automatically after 15 min”. The notification in the status bar has the headline, at most three reasons and one line “what to do · unofficial source”.
Where to shelter opens the GROTA module straight on the TERAZ (now) tab: it finds your position and shows the nearest shelter points from the public list of Poland's State Fire Service (dane.gov.pl) — open around the clock, open at set hours and “on request” — with the distance and a route on foot, by bike or by car. GROTA starts loading in the background as soon as the alert appears, so it opens at once after you acknowledge. Outside an alert, open it with the GROTA button in the middle of the bottom bar; it also has the Map, Places, Prepare and Rules tabs.
- The list of points and the nearest-point search work offline. A road route needs the internet; without it you see the straight-line distance.
- GROTA covers Poland only. Outside the border it shows a message instead of a route and lets you set the place by hand.
- It is a list of places, not a guarantee: points open “at set hours” or “on request” may be locked. Ask the building manager in advance.
- GROTA speaks Polish, English and Ukrainian — pick the language in its Zasady (rules) tab. It is in the Android and iPhone apps; it is not on the website.
On iPhone alerts work differently: no full screen, the siren plays once, and a silenced ringer silences it — unless you turn on Turn on alert despite silent mode in settings (Apple Critical Alert). Red then sounds even on a silenced phone, and iOS marks the notification with its critical-alert label. The details and the settings to check are in the iPhone guide.
10. The website and browser notifications
The same map runs at straznik.eu. At the top there are also Download app, User guide and Buy a coffee buttons. The browser tab shows the Strażnik icon.
Browser notifications: first save a province in Menu → Settings → My places, then open Menu → Notifications and allow notifications. They arrive also with the tab closed — one per alert, without a continuous siren. The continuous siren with vibration plays only in an open tab at the red level. On an iPhone notifications work only for the site added to the Home Screen.
Turning them off: open Menu → Notifications (or Menu → Settings → Alerts and permissions) and choose Turn off notifications in this browser. Strażnik then removes the subscription on the server and in the browser. The browser permission itself is removed in the browser settings — the message gives the path for your browser, for example:
In any browser: open its Settings, type “site settings” (or “site”) in the search field → Permissions → find straznik.eu → Notifications → Block.
Chrome on Android: ⋮ → Settings → Site settings → Notifications → straznik.eu → Block.
11. Where the points come from
Points count over a 60-minute window. For the first 30 minutes a signal keeps full weight, then loses it linearly to zero. Every source class has a cap, so many articles or oblast alerts about the same thing do not add up without limit. A repeated observation of the same NEPTUN object is not counted as a new object.
| Source | What is taken into account | Points / cap |
|---|---|---|
| NEPTUN — objects | Type, number of objects, distance from the border, heading, confidence, number of confirmations, observation state and position quality. Report area ×0.6, recognised locality centre ×0.5. | up to 8 in total |
| RCB / RSO | An Alert RCB about an airborne threat published in RSO. It counts for 60 minutes from detection, regardless of the entry's validity date. A cancellation in RSO zeroes the alert at once. Since 17.09.2026 RCB sends three kinds of message and they weigh accordingly: “the situation is being monitored” 1.5; “a massive attack is under way… react to alarm signals” 3; “threat of an air attack, find a safe place” 4.5. A later alert does not add to the earlier one: the current one counts, and the surplus of a stronger one fades within 10 minutes. Since 24.09.2026 the text of the day's message on gov.pl/rcb is read as well: RSO sometimes carries only part of the alert's recipients (podkarpackie was lost on 17.09 and 24.09), so the missing provinces are taken from that page — the same way when the app scores on its own, without the server. An article on gov.pl about an alert that RSO has already cancelled scores nothing. | 1.5 / 3 / 4.5, cap 4.5 |
| Ukrainian oblast alerts | An air-raid alert in a western Ukrainian oblast; the weight falls with distance (table below). Full weight for the first 30 minutes of the alert, then half while it lasts; the end of the alert zeroes the points at once. | up to 1, cap 1 |
| Media (RSS) | Airborne object plus event: 0.5 pt; an unambiguous operational report (sirens, alert, scrambled aircraft, interception): 1 pt. The server reads the whole article: a report on an earlier event or an unreadable article scores 0. Exercises, anniversaries, court cases and restated RCB alerts also score 0. | 0 / 0.5 / 1, cap 1 |
| ADS-B | At least 3 military aircraft and more than twice the usual traffic at that time of day (7-day baseline). Since 13 Sep 2026 informational only: over 41 days of data, increased traffic was routine flights. | 0 |
| PAŻP zones | Only rare D, R, NPZ, ADHOC zones from the ground up over the east or the north (below). | 0.5 (north 1), cap 1 |
| Baltic media | An airborne incident (airspace violation, shoot-down) in Lithuania, Latvia or Estonia: 0.5 pt. An announced air-raid alert for the public there is a trace in the panel: Lithuania 0.3, Latvia 0.18, Estonia 0.12. Feeds: LRT and 15min, LSM, ERR. A cancellation clears the contribution. A headline that still announces an alert (e.g. narrowed to a smaller region) is not a cancellation; an article published before the cancellation does not reopen the alert, and a report about alerts in other countries is not an alert in the outlet's own country. Feed status and the last alert are in the Sources window (tap the indicators). | alert 0.12–0.3; incident 0.5 |
| Neighbouring airspace | Airspace closures in Lithuania, Estonia and northern Romania. | 0.3, cap 0.6 |
| Other neighbours (observation) | An airspace event in Moldova, Romania, Slovakia, Czechia, Sweden or Hungary. The country lights up on the map and the entry appears in the panel — but it adds no points at all and raises nothing by itself. Why, below. | 0 |
Six new neighbours — watched only, for now
Since 3 October 2026 Strażnik also reads the media in Moldova, Romania, Slovakia, Czechia, Sweden and Hungary — two feeds per country. An airspace event in any of them highlights that country on the map; tapping it opens a card with the report and a link to the source.
These six countries add no points. None. They cannot raise the level, they will not trigger a notification and they will not change the colour of your province. The reason is simple: Czech and Slovak newsrooms write about other countries’ airspace more often than their own, so the filter is being checked for a few weeks first — to make sure it does not take an event in Denmark, or over Poland, for an event of theirs. Once that holds, the weights go on, and the changelog will say so. Lithuania, Latvia and Estonia are unchanged and score as before.
The status of these feeds is in the Sources window (tap the indicators at the top) under a separate entry, “Other neighbours — observation”. Sweden, which was missing before, has been added to the map along the way.
Ukrainian oblast alerts — weight by distance
The weight falls smoothly: at the border 1; 50 km 0.7; 100 km 0.5; 150 km 0.3; 220 km 0.15; 320 km 0.08. An oblast counts for both provinces, each by its own distance. Time counts from the real start of the alert: full weight for 30 minutes, then half while it lasts. When the oblast has been off the alert list for 3 minutes, the alert has ended — the points and the highlight disappear at once, and the panel shows the end time:
| Oblast | Lublin: km | weight | Subcarpathian: km | weight |
|---|---|---|---|---|
| Lviv | 0 | 1.00 | 0 | 1.00 |
| Volyn | 0 | 1.00 | 55 | 0.68 |
| Zakarpattia | 135 | 0.36 | 0 | 1.00 |
| Ivano-Frankivsk | 100 | 0.50 | 50 | 0.70 |
| Rivne | 70 | 0.62 | 110 | 0.46 |
| Ternopil | 100 | 0.50 | 115 | 0.44 |
| Khmelnytskyi | 160 | 0.28 | 190 | 0.21 |
| Chernivtsi | 225 | 0.15 | 180 | 0.24 |
| Zhytomyr | 220 | 0.15 | 265 | 0.12 |
| Vinnytsia | 280 | 0.11 | 305 | 0.09 |
Even alerts in all oblasts at once give at most 1 point — oblast alerts are one piece of information, not several independent confirmations.
Media: reading the whole article
A headline can mislead: an article published at 9:46 with a headline about sirens may describe the night. So the server fetches the article text and looks for the time of the event — an hour (“before 4 a.m.”, “at 4.19”), words such as “overnight”, “before dawn”, “yesterday” or another weekday. If the event was more than an hour before publication, the article is shown as a report on an earlier event and scores 0. Google News links lead to Google's consent page, which the server does not accept — instead it looks for the same article in the publisher's own RSS feed. If the text cannot be read, the article scores 0 and stays in the panel with its link.
After an RCB alert is cancelled in a province, articles reporting the sirens or the alert score 0 for 4 hours, unless RCB issues a new alert. Summary headlines such as “A restless morning…” count for 0.5 points at most.
NEPTUN objects and distance
Type weights: ballistic 3.0; MiG-31K 2.6; cruise 2.4; KAB 1.8; Shahed 1.4; drone 1.1; reconnaissance 0.15; FPV 0. The weight is multiplied by the square root of the number of objects, distance, heading and data quality: confidence (high ×1.0, medium ×0.6, low ×0.35), number of reports (one ×0.7, two ×0.9, three–four ×1.1, five or more ×1.25), observation state (confirmed ×1.1, uncertain ×0.85, fresh ×0.7) and position quality. Distance works smoothly: 0 km ×1.7; 15 ×1.6; 45 ×1.3; 80 ×1.0; 110 ×0.7; 150 ×0.4; 200 ×0.25; 250 ×0.1; beyond that 0. An object scores every province within 250 km, each by its distance to that province — not only the nearest one. Since 1.7.97 the app counts the same way when the server does not respond and it calculates on its own. A heading within ±50° of the direction to Poland counts in full, between 50° and 70° less and less, beyond that not at all. With an unknown heading an object gets half the weight and only up to 150 km. A drone reported only with a target counts with full weight, but also only up to 150 km from the border (since 28.10.2026). A missile or MiG-31K within 60 km of the border, with at least two confirmations and a point position, gives at least 2 points (1 point with an unknown heading).
Drone near the border (since 18.10.2026): a drone or Shahed within 30 km of a province, with at least two reports and a point position, gives that province at least 2 points, i.e. yellow — even without a known heading, unless the heading shows it flying away from Poland. The distance is measured to each province separately, so a drone close to two provinces warns both. This extra does not pass to neighbouring provinces, and a single report is not enough.
Time to arrival
The object card estimates the time to the Polish border and to the border of the chosen province, not to an address. It uses the speed given by the source, measured from successive positions or typical for the object class, and subtracts 2.5 minutes for data delay. ETA is not shown for approximate positions. With a heading that is known or calculated from the object's movement (not presumed from the target's name), at least two confirmations, medium or high confidence and a point position, an ETA of ≤ 10 min raises the object's contribution to 2 points, and ≤ 5 min to 4 points.
When red is raised
4 points alone are not enough. Since 23 September 2026 red also needs a confirmation — one of two:
- An RCB alert saying “find a safe place” — the highest of the three levels RCB has used since 17 September. Such an alert raises red on its own, because the state is explicitly telling people to take shelter.
- A real strike object heading at Poland — a missile, Shahed, guided bomb or combat drone whose time to the border is 15 minutes or less, or which is closer than 50 km. The second condition is a safeguard for a jet drone (Geran-3/4) that the source did not describe as jet-powered — for it, 50 km is under 7 minutes. A position given only as an area (the middle of an oblast) with more than 30 km of uncertainty is not enough — such a report adds points but does not open red (since 15.10.2026). Nor does a “towards the target” point: an object with a presumed heading and an area position that the source derives from the target and heading, not from an observation (since 18.10.2026). The report about the object must be no older than 25 minutes.
The time is computed from the speed typical for the object class, minus the 2.5-minute margin, so the threshold converts itself: a propeller drone about 55 km, a jet drone about 140 km, a cruise missile almost 250 km. Reconnaissance drones are not a confirmation — they do not strike.
Without a confirmation the province stays yellow even at 5 points, and Strażnik says so on the card: “no confirming object — stays yellow”. Why: until 23 September an RCB alert about a monitored situation, together with Ukrainian oblast alarms and media reports, could turn a province red although nothing on the map was closer than 80 km. On the data since 1 September the new rule keeps red in two cases out of eight — those where an object was 15 minutes from the border.
A wave of objects
Three different objects heading towards Poland within 15 minutes and closer than 150 km add 0.5 pt together. Several objects at once mean more than each on its own, and repeated reports about the same object do not make a wave. Since 1 September a wave occurred four times, every time during a real event.
Spillover to neighbouring provinces
A province with at least 2 points from signals other than a regional Alert RCB and NEPTUN objects passes 40% to its neighbours, 16% to the next ring, and so on. An official RCB alert is not passed on — its area was set by the issuer. Neither are NEPTUN objects (since 1.7.99): every object itself scores every province within 250 km by its own distance, and before, the same drone was counted a second time in the neighbour — on 19.10.2026 Świętokrzyskie, with 1.1 points of its own, reached 9.5 points and red colour this way. What is passed on are Ukrainian oblast alerts, media, aviation and zones. The same event does not come back through spillover: an article or an oblast alert assigned to two neighbouring provinces counts fully in each, but is not added a second time as spillover. Spillover is regional context, not a forecast of an object's route; colour from neighbours alone is dimmed and does not ring. The extra from the near-border drone floor stays in its own province — neighbours get a share of the object's ordinary points only.
Which PAŻP zones score
PAŻP publishes dozens of zones every day: military training, parachute jumps, gliders, commercial drones. If every one scored, the map would be yellow every day. So:
| Zone type | Meaning | Scores? |
|---|---|---|
| D — danger area | firing, exercises | yes, under the three conditions below |
| R — restricted area | entry only with permission | yes, under the same conditions |
| NPZ — no-fly zone | closed area | yes, under the same conditions |
| ADHOC | created on the same day | yes, under the same conditions |
| TSA / TRA | exercises planned in advance, almost daily | no — map only |
| ATZ | ordinary aerodrome traffic | no — not shown |
| notes PJE, GLD, CLN, BSP, UAV | parachutes, gliders, civilian drones | no — filtered out |
A D, R, NPZ or ADHOC zone scores only when it meets all three conditions: it reaches from the ground up, the same designator has not appeared in the last 7 days, and the zone lies over the eastern border or the north. The weight is low (0.5 points) because closing the sky is a military decision, not an independent measurement of a threat — a zone never raises the level on its own.
In the north a zone weighs 1 point. NEPTUN watches Ukraine and gives nothing for Pomerania, West Pomerania, Warmia-Masuria and Kuyavia-Pomerania. What remains is zones, media, RCB and airspace closures by Baltic neighbours. The safety rule does not change: zone 1 pt + a media report 1 pt = yellow threshold; since 15.09.2026 a Baltic incident from the media weighs only 0.5 pt and only a fresh report (up to 30 minutes) about something happening now counts, so zone + Baltic is 1.5 pts; a zone alone is still silence.
12. Limitations and troubleshooting
- A red indicator — one source is not responding. The others keep working; fusion simply has fewer confirmations. When NEPTUN has not responded for more than 2 minutes, a bar “NEPTUN not responding since…” appears above the map. Objects from the last report stay on the map, because an empty map during a source outage would look like calm.
- An empty map or all indicators red — check the connection and try another network. Antivirus software or proxies that intercept HTTPS can block the app's connections; do not disable protection permanently, check an exception for straznik.eu instead.
- No notifications — check My places (watched province), permissions, notification channels, battery settings and whether the app was force-stopped. A sound test does not check the push path from the server.
- An object is in the list but not on the map — a signal lives in the 60-minute window, while positions come from the current snapshot. An object disappearing does not prove it was shot down.
- An incomplete picture — NEPTUN is an OSINT aggregator, not a radar; ADS-B sees only public transponders; messages and articles can be late. No points does not prove there is no threat.
13. Your own server — optional
An empty Menu → Settings → Language, text and version → Advanced: shared backend field means the default Strażnik server. Enter your own address only if you run a compatible backend and its notifications yourself. HTTPS with a system-trusted certificate is required. How to run the backend is described in the README. Running your own backend for other people requires a licence from the author.
14. Privacy and sources
The full privacy policy — what stays on your device, what the server sees and which third parties are involved in delivering the data.
No account, no ads, no analytics. My places, their names and one-off location points are stored only on the device; Android backup is disabled for the app. The server and the notification provider receive the names of watched provinces and the device subscription identifier — never an exact location. The exceptions are in GROTA: for a route the position and the chosen point go to the public FOSSGIS routing server, not to us, and downloading an “Around a place” offline map shows our server the area to within a square of about 12 by 20 km (details).
The server and the providers of maps, notifications, photos and data receive ordinary network requests and may keep technical logs. When reading articles, the server fetches publishers' pages like an ordinary browser, without accepting cookie consent.
Data: NEPTUN · ADS-B © adsb.lol (ODbL) · RCB / RSO · PAŻP · regional and Baltic media · neighbouring airspace zones. Map: OpenFreeMap, © OpenStreetMap. Aircraft photos and their authors are credited in the cards.














