Everything that has shipped, newest first.
Settings are saved to your account and follow you to any browser or device β change the theme here and you'll find it applied after signing in anywhere else.
Every task in D.E.L.P.H.I., step by step. Open a heading to see the steps. For what something is, or why it behaves the way it does, switch to the β FAQ tab.
The header holds everything else. Click βΉ at its top to expand it into labelled buttons and reveal the search box, or press \ (backslash) any time you aren't typing in a field.
Create an account: on the sign-in card choose Create one,
then give a username (3β32 characters β letters, digits, _ . -),
an email address, and a password of at least 8 characters. D.E.L.P.H.I.
emails you a verification link; open it and you're verified.
Sign in: username or email address, plus your password. Press Enter in the password field instead of reaching for the button.
Forgot your password: choose Forgot password?, enter your account's email address, and open the link that arrives. It takes you straight to a "set a new password" card. Reset links expire, so request a fresh one rather than reusing an old email.
Sign out: π€ in the top-right corner opens your account panel; Account security β πͺ Sign out ends this browser's session. To end every signed-in device at once (a lost phone, or someone else in your account), use π Sign out everywhere directly beneath it.
No verification email? Check spam first. If it still hasn't arrived, the server may have no mail configured β see the π Troubleshooting tab.
Switch boards with the buttons at the top left: π Home (Delphi's curated columns), π My feeds (the ones you built), and one button per π Pantheon you belong to.
Scroll sideways by dragging the gold bar under the board, clicking anywhere on its track to jump, or rolling a mouse wheel over the board. The bar hides itself when every column already fits.
Search everything from the box in the header: type and press Enter and the results arrive as a temporary column at the left of the board. It accepts plain words or full Boolean syntax. Press β in that column's header to dismiss it, or empty the box and press Enter.
Read the tiles along the top: articles in the last 24 hours, countries covered in the last 24 hours, how many sources polled cleanly, and how many alert hits you haven't looked at yet.
Each row carries the headline, then a line of markers:
Clicking a row never leaves D.E.L.P.H.I. It opens the story in Story Focus, and the outlet's own page is a marked button in there β so a stray click can't send you to a page you hadn't decided to visit.
A brand-new account has nothing in π My feeds, and the board offers two ways out:
The third option is to browse π Home and press π on any column you like the look of, which copies it to My feeds as your own.
Press οΌ Create in the header. Make sure the toggle at the top of the wizard reads π Feed, then work through the four steps β you can jump between them with the numbered tabs, and everything except the name is optional.
The new column appears at the end of π My feeds.
Press οΌ Create and set the toggle to π Alert. Steps 1β3 are identical to a feed β an alert is the same set of criteria, watching instead of waiting. Step 4 offers different options:
http:// or https://.Keep alerts narrow. A broad alert fires constantly and stops meaning anything; that's what a feed is for.
Edit: press β in a feed's column header, or β beside an alert in the π panel. The wizard reopens with everything filled in; change what you want and press Save changes.
Convert: while editing, flip the π Feed / π Alert toggle at the top. Every criterion carries over and saving completes the conversion β a feed you keep checking becomes an alert that checks for you, or the reverse.
Delete: the red Delete button at the bottom of the wizard, or π beside an alert in the π panel. Deleting a feed doesn't touch the articles β they belong to the shared database, not to your column.
Reorder: grab a column by its header β anywhere that isn't a button β and drag it left or right. The board opens a gap where the column will land, so you can see the new arrangement before you let go. Holding the column against either edge of the board scrolls it, so you can reach a position that is off screen. The order is saved to your account when you let go.
Resize: drag a column's right edge β a gold line marks it when your pointer is on it β anywhere between 240 and 1000 pixels wide. Double-click that edge to return the column to the default width. β in the header flips between the standard and wide widths in one click.
On a wide or ultrawide monitor the columns share out whatever space is left rather than leaving it empty on the right β they widen from 360 pixels up to 560, and past that the remaining space is split evenly on both sides. Any column you have sized yourself keeps exactly the width you gave it and takes no part in that, so a board you have arranged stays arranged. Add more feeds and they fill the extra width instead.
Resize from the keyboard: Tab to a column's right edge and use β and β (hold Shift for larger steps), or Home to reset it.
Refresh one column: β³ in its header re-runs just that feed's search. The heavier β³ Refresh now β which polls every source β is in π€ Settings β π Troubleshooting.
Take a column away as a file: β€ in its header offers five formats. π Excel gives a workbook with the header frozen and filters switched on β the two things anyone does to a sheet before they can use it. π Word gives a readable brief with a heading per story, so Word's navigation pane lists the headlines. π CSV opens anywhere, π Markdown suits a wiki or a report you're writing, and π§Ύ JSON carries every field for a script.
An export reaches back further than the column shows β up to 500 articles against the forty on screen β and it exports what the feed matches now, in your reading language, not what happens to be scrolled into view. Home's columns and a Pantheon's shared columns export too, even though you don't own them.
Copy a column you don't own: π on a Home column or on anything shared with a Pantheon puts an editable copy in π My feeds.
One story, one view. A report nobody else has picked up and a story forty outlets are carrying are the same thing at different distances, so both open here β the report you picked, and the whole story around it when other outlets have it.
Esc closes it. Opening a story marks it read: it dims everywhere it appears, straight away and on every device you sign in from, so a second pass over the board shows you only what you haven't triaged. Hover a dimmed row to read it at full strength.
The map needs internet access for its background tiles. Without it you'll get a message instead of a map β every other filter still works.
Add one: open the πΊ Atlas board, go to the π Locations tab, press οΌ New location and start typing in the search box. Suggestions appear as you type: cities and countries D.E.L.P.H.I. ships come first and instantly, and a street address, a town or a district is looked up through OpenStreetMap and listed below them, marked π. Each suggestion says where it is, so two towns with the same name are easy to tell apart. β and β move through the list, Enter takes one, Esc puts it away β or click the map for a spot with no name at all. Then set the radius with the slider, give it a name, and press Save location.
From then on, any article D.E.L.P.H.I. places inside that radius carries a π badge everywhere it appears β in every feed and alert, not only its own. All your locations also share a single π Favourite Locations feed β one column carrying news near any of them, however many you keep β created the first time you save one.
Saving a place also starts collecting news about it. Delphi adds a local news search for the place you picked, so the column fills with coverage of it rather than only catching whatever the global catalog happened to gather. Rename the place and the search moves with it; delete the location and it goes away.
A story counts as being about your location if it names the place in its headline or summary, or if Delphi can place it inside the radius from the towns and cities it recognises. The name matters most: Delphi recognises around 600 cities by position, so anywhere smaller is found by name β which is why the place you pick keeps its own name even if you rename the location to βHomeβ.
Clicking a bare spot on the map still works, but it has no name to search for or match on, so it can only rely on the towns Delphi already recognises nearby. Picking from the search box is the stronger choice.
Edit one: press Edit beside it in Saved locations, change the name, the point, or the radius, and save. The shared feed follows the change; the other locations in it are untouched.
Share one: press π beside it and pick a Pantheon β the location then flags news for every member of that group.
Delete one: π beside it. The feed keeps covering whatever locations are left, and only goes away with the last of them.
Open π€ Settings and press π‘ Sources. The list runs to hundreds of outlets, so start by typing in the filter box β it matches name, country, language, platform, scope, category, who added it, and health, and every word you type narrows the list further.
Add an outlet by hand: press β Add source. Give it a name and the URL of its RSS or Atom feed, then set the platform, scope, country, language and categories that feeds and alerts filter on, and tick π Paywalled if its articles are locked. Press Add source.
Track a topic: type it in the Track a topicβ¦ box and press π° Press for worldwide press coverage, or π¬ Social for Reddit and Mastodon feeds on it.
Edit one: β on its row opens every field in place. βΈ pauses polling without deleting it (βΆ resumes), and π deletes the source and its articles.
Fix a broken one: a red dot means the last poll failed β hover it for the exact error. Press π§ to make D.E.L.P.H.I. hunt for the outlet's real feed and switch to it.
Sources are shared by everyone on this server. Adding, editing, or deleting one affects every account here.
A restricted feed carries a π‘ badge in its header naming the outlets. Leave the selection empty and the feed considers everything.
The outlet list is fetched while you work, so the first editor you open in a session may show Loading the outlet list for a moment on this step. Every other part of the wizard is usable meanwhile, and the list stays loaded for the rest of the session.
Open the πΊ Atlas board β the π Alerts tab is the one it opens on. The number on the Atlas button counts hits you haven't seen, and the top of the tab lists the ones inside whatever the map is currently showing, grouped by the watched place they landed in.
Create one: open the π Pantheons board, press π New Pantheon, name it, optionally describe it, choose π Private (invitation only) or π Public (anyone can join), and press Create.
Invite people: reopen it, go to the Members tab, and enter a username or email address. They accept from the π panel on their own account.
Accept an invitation: the π button shows a count when you have one. Open the panel and press Accept under Invitations.
Join a public one: find it under Public Pantheons and press Join.
Share something: press π on any of your feeds, alerts, or favourite locations and pick the Pantheon. A copy appears on that Pantheon's board for every member, tagged with your name. Your original stays yours.
Manage roles: on the Members tab, an owner can promote members to admin, or transfer ownership by promoting someone to owner. The Access tab restricts who may invite and who may share.
Leave or delete: Leave at the bottom of the dialog for members and admins; owners must transfer ownership first, or use Delete Pantheon to close it for everyone.
Athena is a board inside every Pantheon. It answers the question a stack of weekly reports cannot: not what did we say in March, but what have we been circling for three months without noticing β and what has gone quiet.
Open it: go to π Pantheons, open one, and press π¦ Athena in the bar at the top. π Shared feeds in the same place takes you back.
1. Make your themes. The board starts empty on purpose β the vocabulary is your group's, not ours. Go to π· Themes, give each one a name, optionally a domain to group it under (each domain takes a colour on the grid), and optionally some keywords so uploads can suggest it. Owners and admins manage the list; every member can file against it.
2. File a document. Press οΌ File a document and choose a
.docx, .md or .txt. Bold headings
become topics, "Heading: a line about it" works too, and any links become
sources. A review step then shows everything it found with suggested
themes β tick the ones that are right, untick the ones that are not, and
edit any title β and nothing is filed until you press File it.
3. Read the grid. β¦ Coverage is themes down the side and weeks across the top. Each cell is how many topics in that period carried that theme, shaded so the busy stretches stand out; press one to see exactly which topics were behind it. Group by switches between week, fortnight and month, and From/To narrow the range.
The other two views: π Sources groups every link you have filed by the site it came from, most-cited first β a different question from what you wrote about, and often a more uncomfortable one. π Documents lists what has been filed, who filed it, and lets you remove one.
Your documents never leave your browser. The file is opened, read and discarded on your own machine; only the topics, themes and links you confirmed are sent to Delphi. The original is never uploaded and never stored.
Typhon draws what is happening right now β fires, air quality, earthquakes, storms, floods, volcanoes, droughts and severe weather β on the πΊ Atlas map, beside your watched places and alert hits.
Switch layers on: the panel on the right of Atlas has two collapsible folders. πΊ Base map picks the ground; π Typhon holds one switch per kind of hazard, with a switch above them all that turns the lot on or off at once. Both folders remember whether you left them open.
Fires have a shape. Where the agencies have flown a perimeter, Atlas draws the real mapped boundary. Where they have not β which is most fires β you get a dashed circle showing the approximate area burned, worked out from the reported acreage. It says which you are looking at when you press it. Outlines load from about the zoom of a large state and in; further out they would be smaller than the dot on top of them.
Get told when a fire is near a place you watch: open π Locations on Atlas, edit a place, and set a wildfire distance. Any fire reported inside that ring raises an alert and draws as a π₯ flame instead of a dot. Tick email me to have it reach you when Delphi is closed. Air quality has no ring and never notifies β it is a value that exists everywhere rather than an event, so it is shown on the place instead.
Air quality on a watched place appears on its row and in its map popup, and always says what it rests on: an average of the monitors within five kilometres, or the nearest one with its distance stated.
Press π€ in the top-right corner. Everything here is saved to your account and follows you to any browser or device.
The Help section at the bottom reopens this dialog, and π What's new shows the full release history, newest first β the same list that appears by itself when something has shipped since your last visit.
β³ Refresh on a column polls every news wire immediately, plus a bounded slice of the local city feeds. Use it after adding a source or a topic tracker.
β³ in a column header re-runs that one feed's search against what has already been ingested. It is instant, and it's what you want when you've just changed a feed's criteria.
Neither is normally necessary. Sources refresh continuously on their own cadence, and the board updates itself as articles arrive.
Once the board you are looking at has finished loading, D.E.L.P.H.I. quietly loads the other boards behind it β one column at a time, so it never competes with what's on screen β which is why switching between π Home, π My feeds and a π Pantheon is usually instant.
Columns are also kept on your own computer, so reopening Delphi paints the board from local storage before it asks the server anything β and the news you last saw stays readable even when the server is unreachable. That copy is bounded, belongs to your account alone, and is erased when you sign out.
Delphi checks new passwords against the ten thousand most common ones β the list attackers work through first β and refuses them. It also catches the padded versions, so password, Password123 and P@ssw0rd1 are all the same answer.
This isn't about mixing in symbols. The reason is simpler: most break-ins aren't someone guessing your password, they're someone replaying an address and password taken from a different site that got breached. A password nobody else has ever used can't arrive that way.
What works: a few unrelated words β quartz-heron-lantern β or whatever your password manager generates. Both are accepted; the words are just easier to type on a phone. Delphi also refuses passwords containing your own username or email name, and ones that are only digits.
π€ Settings β Account security β Change password. You'll need your current one, then the new one twice. No email involved, so it works even on a server with no mail configured.
Delphi asks for the current password even though you're already signed in, and that's the point of it rather than a nuisance: being signed in isn't proof you're the owner β it could be a laptop left unlocked. Without that check, a moment's access to your screen would be enough for somebody to set a new password and keep you out for good.
Your other devices are signed out when it succeeds. This browser isn't β you just proved you know the password.
Forgotten it entirely? Sign out, then use Forgot password? on the sign-in screen instead.
Go to π€ Settings β Account security β Sign out everywhere. That ends every signed-in browser and phone on your account β including any you no longer have, and any that isn't yours. Signing out from π€ in the corner only forgets this browser, which does nothing about a session somewhere else.
Then change your password using Forgot password? on the sign-in screen. Changing it also signs out every device, so doing both is belt and braces β either one on its own is enough to end the other sessions.
Your feeds, alerts, Pantheons, and settings are untouched by either. You'll just sign in again.
Sessions last 30 days, so one may simply have run its course. Three other things end one deliberately: you used Sign out everywhere, your password was changed (by you or an operator), or an operator suspended the account. Delphi says which of those it was on the sign-in screen rather than leaving you guessing.
An update that changes how sessions work will also sign everyone out once. That is deliberate and safe β it's the only way to be sure no older session survives the change.
Most of Delphi is shared on purpose: the article database and the source catalog belong to everyone on this server, and any signed-in account can add a source or correct one. A few things are held back to operators, because they affect every reader at once and one machine serves all of them.
β³ Refresh now deliberately stays open to everyone: it is the one thing you can do about a feed that looks stale, only one poll runs at a time, and it is rate-limited rather than restricted.
Adding a source, or pointing an alert at a webhook, asks the server to fetch a URL on your behalf β and a server can reach addresses your browser never could, including the machine it runs on and anything else on its private network. Delphi therefore only fetches from public internet addresses, and says so plainly if you paste something else.
The check is repeated on every redirect, not just when you save, because a public address can answer with "go here instead". Feeds are also only fetched over the standard web ports.
If you are self-hosting and genuinely want Delphi to read a feed on your own network, that is a change to the server's code rather than a setting β deliberately, because the same switch would let every account on your server do it too.
Operators β accounts named in the server's NEWS_ADMIN_USERS
setting, or promoted by another operator β get an Operator section at
the foot of π€ Settings, with a π Operator console button that
lists every account on this instance. Nobody else sees that section.
NEWS_DEVICE_LIMIT); 0 means no limit."In use" is not "signed in". A sign-in lasts thirty days, so counting those would report a phone somebody used once last month. Each row counts devices something has actually arrived from in the last few minutes; close a laptop and it stops counting shortly after. Several tabs on one machine count as one device. A browser whose site data has been cleared, or a private window, looks like a device that has never been seen before β devices are recognised by an identifier the browser stores, not by fingerprinting it.
Somebody who hits the limit is told which limit they hit and offered a link, by email, that signs the account out everywhere so they can start again on the device in their hand.
Accounts designated in NEWS_ADMIN_USERS can't be suspended or
deleted from here β change the server setting instead.
What the parts of D.E.L.P.H.I. are, and why they behave the way they do. For the steps to actually do something, switch to the π How to tab.
Both use the same criteria (keywords, Boolean searches, countries, categories, map areas, importanceβ¦). The difference is posture:
A feed is a place you look. It's a column on your board that always shows the current matching articles, sorted and optionally grouped into events. Nothing interrupts you.
An alert looks for you. Articles are tested against your active alerts as they arrive β continuously, not on a fixed schedule, since each source refreshes on its own cadence. A hit is pushed live to the dashboard β toast, sound, bell counter, optional desktop notification β and stored in the alert's history with a map of where hits happened.
Rule of thumb: broad topics you check on your schedule β feed. Narrow, time-critical triggers ("anything Critical inside this drawn box") β alert.
Out-of-app delivery. An alert can also reach you when the dashboard is closed: tick βοΈ Email me (a digest to your account address each time it fires β needs server SMTP configured) and/or set a π webhook URL to POST the matching hits as JSON (for Slack/Discord/your own service). Both batch per firing, so a busy alert can't flood you.
Convert any time. Both are built in the same wizard β pick with the π Feed / π Alert toggle at the top. Open an existing feed or alert with β and flip that toggle to turn one into the other; every criterion carries over, and Save completes the conversion.
A column's width is a reading preference, not a property of the feed, so it is kept on your account alongside the theme and the timestamp format. Two consequences follow. It travels with you to any browser or device you sign in from. And widening a column on a Pantheon's shared board widens it for you alone β nobody else's layout moves, even though you are all reading the same shared feed.
Widths run from 240 to 1000 pixels. Below 240 a headline stops fitting on two lines; above 1000 a column stops being a column.
By default a feed or alert considers everything D.E.L.P.H.I. has ingested. Naming sources turns that around: only those outlets are searched. It is a filter like any other, so it combines with the rest rather than overriding them β a feed restricted to three outlets and asking for the keyword "flood" returns flood coverage from those three outlets, not everything they publish.
That makes an over-restricted feed the commonest cause of an empty column. If a feed you've narrowed to a handful of outlets stays quiet, it usually means those outlets haven't published anything matching, not that ingestion is broken.
If a source is later deleted, feeds pointing at it simply stop matching it; they don't silently widen to everything.
Delphi keeps the last contents of every column you've seen, and repaints from that the moment you switch, refreshing behind it. So a board you have already read comes back immediately rather than reloading in front of you.
It also warms the boards you aren't looking at. When the visible board has finished loading, the others are fetched in the background β one request at a time, where the board on screen gets two, and never before the visible one is done. Switching away stops it. A column fetched in the last couple of minutes is left alone, so moving back and forth between boards costs nothing.
Some of the work happens on your machine rather than the server, which is why parts of Delphi respond with no delay at all. Your browser decides which articles are near a π favourite location, and which events are too stale to show β both are questions about data it already holds. So adding a location badges the articles already on screen, and changing the staleness threshold re-filters the board, without fetching anything.
This is why a switch can show news a few seconds old. Nothing is hidden by it: new articles push a refresh of the visible board as they arrive, the column's own β³ always re-queries, and so do β³ Refresh, saving an edit to a feed, and changing the staleness threshold.
Some headlines carry a small chip naming how reliable the outlet that filed them is considered to be β β Generally reliable, ? No consensus, ! Generally unreliable, β Deprecated or β Blacklisted.
It is not Delphi's judgement. The ratings come from Wikipedia's perennial sources list, a public list maintained by the Wikipedia community where every entry links to the discussion that produced it. The chip is a link: click it and you can read the argument and disagree with it. Delphi is passing on somebody else's published finding, with attribution, and is not asserting anything of its own about any outlet. The list is used under its CC BY-SA 4.0 licence.
No chip means nobody has assessed that outlet β never that it failed. The list covers roughly 620 publishers, which is a small fraction of the thousands Delphi reads. Most articles will never carry one.
On a feed card only the warnings appear. A chip reading "Generally reliable" beside every headline from a major paper is noise, and noise is what stops warnings being read β so favourable ratings are shown when you open a story, where you have gone to ask about that one article.
Political bias is deliberately not shown. There is no free, auditable source for it. The best-known one is one person's opinions, which its own site describes as "not a tested scientific method", and a label that changes how you read the news should be better founded than that. Factual reliability is a question with published reasoning behind it; political lean, for now, is not.
When an outlet Delphi has never seen turns up publishing in someone else's coverage, Delphi looks for that outlet's own feed and adds it β which is how the catalog grows toward wherever the news actually comes from. The risk is obvious: a ticketing calendar, a shop and a jobs board all publish feeds with exactly the shape of a news feed, and one of them (a record label's concert calendar) really did become a "national news" source and put gig listings into an energy feed.
So before adopting anything, Delphi reads the feed:
Two of those signals are needed to decline a feed β one is not enough to overrule an outlet. Every auto-added source is also re-read about once a month as it is polled, so anything adopted under the older rules gets caught too. A source that fails is switched off, not deleted, with the reason in its status line in the Sources panel, and a source you added yourself is never switched off this way β you chose it, and this is a heuristic.
Every article gets a transparent 0β100 score β no black box. It adds up:
Tiers: β² Critical β₯ 80 Β· β High 60β79 Β· β Notable 40β59 Β· β Routine < 40. An event's importance is its highest-scoring report. Filter any feed or alert with the minimum-importance slider.
And then it fades. That total is what a story was worth when it broke; what it is worth now falls as the story goes quiet. Nothing moves for the first six hours, and after that a score gives up half the distance to its floor roughly every two days. Without this a floor of 60 slowly fills with whatever was urgent last week, because two articles scored on different days were being compared as though they were not.
Age is counted from the last time the story was added to, not from when each article was filed β so coverage from Monday holds its value while the story is still running, and only starts falling once nobody is filing on it. That lift expires after two weeks, because coverage from three weeks ago is old coverage even when the story continues.
A score never falls below 40% of where it started, so the archive stays searchable: a Critical story from last year still outranks a routine one, and a search with a high floor still finds it. An article carries both numbers β what it is worth now, and what it scored when it broke.
Coverage of the same story from different outlets is clustered into an event (headline similarity, 72-hour rolling window). Feeds with "group into events" show one card per story with a report/source count. Clustering also uses language-invariant anchors β canonical city names (recognized across scripts, e.g. ζ±δΊ¬ β Tokyo) and significant numbers (a magnitude, a toll) β so a story's coverage in its own language groups with the English coverage, not as a separate event.
An event is not a separate thing to read: it is what a story looks like once more than one outlet has it. So there is one Story Focus either way β a headline opens at that report, a grouped card opens at the latest one β carrying the report you are reading plus, when others have it, the map, the timeline of every report, the outlets covering it and related stories. Opening a story marks its event read: it dims everywhere it appears (hover to read at full strength), on your account and on every device you sign in from.
Staleness: a feed can enable π° "Hide events with no recent updates" (wizard, Review step); the threshold is yours, in π€ Settings. Hiding is display-only β clustering keeps attaching new similar reports to hidden events, so an event that gets an update reappears immediately with its complete timeline. Feeds can also be pinned to an explicit date range in the wizard's Refine step.
Boolean searching uses operators to define relationships between keywords β requiring all terms, allowing any synonymous terms, or excluding unwanted concepts β instantly narrowing or broadening results. Searches match the article's headline, summary, and fetched body text.
AND (or just spaces) β narrows: all terms must be present.OR (or |) β broadens: results may feature any of the terms.NOT (or -term) β excludes words to remove irrelevant results."quotation marks" β exact phrase, in the exact order.( parentheses ) β group terms to control the search logic.("supply chain" OR semiconductor) AND (china OR taiwan) NOT rumor
β smart quotes pasted from elsewhere are cleaned up automatically.
Two more operator types: wildcards β strik* matches
strike/strikes/striking, organi?ation matches one character
(both work inside phrases; at least two literal characters required) β and
proximity: earthquake NEAR/5 tokyo matches when the
terms sit at most 5 words apart in either order (NEAR alone
means NEAR/10; chains like a NEAR/3 b NEAR/3 c check each
adjacent pair). Google writes proximity as
earthquake AROUND(5) tokyo; both spellings work.
Order matters sometimes. NEAR ignores which term
comes first. ONEAR/3 does not β Boeing ONEAR/3
crash is a crash of a Boeing, while crash ONEAR/3
Boeing is a crash into one. If you already write
PRE/3 (LexisNexis) or W/3 (Factiva), both
mean the same thing here.
Field operators point a term at one part of the article instead of all of it, which is the sharpest tool here for a query that keeps collecting the wrong thing:
intitle:solar β only the headline. A story that is
about something says so there, so this is the strongest filter
available; intitle:"solar farm" takes a phrase.intext:solar β only the summary and the fetched body,
never the headline.inlede:solar β the headline, the summary and the opening
of the article, and nothing after that. A news story says what it is
about at the top; a word appearing two thousand words down is usually
background, a "related" rail, or the page's own menu. This is the
sharpest filter here after intitle:, and unlike
intitle: it still finds a story whose headline is a pun.source:Reuters β the publication's name.site:bbc.co.uk β the site it was published on, and
-site:example.com excludes one. www. is
ignored.Everything else in a search reads the article and nothing but the article
β never the outlet's name, the web address, or the section it was filed
under. source: and site: are the two exceptions,
and they are exceptions because you typed them.
~word (synonyms) is not supported and says so rather
than matching nothing: there is no thesaurus here, so write the
alternatives yourself β (academic OR scholarly).
AND binds tighter than OR, as it does everywhere else. So
"data center" OR datacenter NOT sports reads as
"data center" OR (datacenter AND NOT sports) β the exclusion
covers the second alternative and nothing else, and sports coverage
matching the first one still arrives. Write
("data center" OR datacenter) NOT sports to exclude from all
of it. The builder marks this one in amber as you type; it is a note, not
an error, because sometimes it is exactly what you meant.
Searches read the whole article, not just what you can see on the card β a term buried in the body counts. So a story opened from one of your own feeds says why it is there: which of that feed's words are in it, where, how many times, and the sentence it sits in. When nothing in the headline or summary put it there the line turns amber, which usually means the words are in the page's own furniture rather than the reporting.
Passing mentions are dropped. A bare word can be in an article
without the article being about it β a football kit colour called
"Solar Yellow", a song called "Innocent Wind", a road called Coal
Heritage Trail. The boolean is right and the result is useless, and no
list of word senses can settle it, because the meaning is in the
sentence. So a single word has to be prominent to count: named
in the headline or summary, or said at least twice, or turning up
alongside another of your terms. Quoted phrases are exempt β somebody
who wrote "shale gas" has already been specific. Tick
πͺΆ Keep passing mentions in the builder to switch it off for a
feed that is deliberately hunting for rare single mentions.
A feed can hold several searches β each runs separately, all fill the same feed. Each row validates as you type, so a stray bracket is caught before you save rather than after.
A hand-curated catalog of around ninety sources across every continent β international wires, national outlets, local papers β plus the social platforms that publish open feeds: Reddit, Bluesky, Mastodon and YouTube. X, Facebook and Instagram publish none, so they can't be ingested. Feeds and alerts can filter by platform.
Local coverage for ~500 major cities worldwide. Each city has a local-news source of its own β that city's Google News edition, in the country's language β so filtering to a place, or drawing it on the map, surfaces genuinely local reporting rather than the national view of it. Auto-discovery then grows each city's real outlets, its newspapers and stations, into first-class sources over time.
Polling is continuous, not one big sweep. News wires refresh every
few minutes and the city feeds every hour or two, less often for a city
that has been quiet, with requests to any shared host paced so nothing
arrives in a burst. Self-hosting? NEWS_SEED_CITIES=0 skips the
city feeds, and NEWS_CITY_INTERVAL and
NEWS_POLL_TICK tune the cadence.
None of it needs anyone signed in. The server polls whether or not a dashboard is open, and alerts reach your inbox while you are away. The columns on π Home are the same for every reader, so they are worked out as the news lands rather than when you ask β which is why Home is ready the moment you sign in, even on a device that has never opened D.E.L.P.H.I.
Saving a feed or alert with queries/keywords also creates a Google News tracker (the π checkbox) that ingests worldwide press coverage of your topic, so matches aren't limited to the catalog. Track topics manually in Sources (π° Press / π¬ Social), edit sources in place, and watch their health dots: green = last poll OK, red = the error is in the tooltip.
Anyone can add an outlet whose RSS or Atom feed they know, and it is polled on the same schedule as everything else. A URL that turns out not to be a feed doesn't disappear: the source stays in the list marked broken, where repair can work on it.
The catalog grows itself. Google News coverage names the outlet
behind every story; when a cycle sees an outlet Delphi doesn't have, it
looks for that outlet's own feed (homepage autodiscovery, then common feed
paths), validates it, and adds it as a source β tagged
auto-discovered in Sources, up to a few per cycle. Outlets without
a usable feed are remembered and left alone. Set
NEWS_AUTO_DISCOVER=0 on the server to turn this off; delete or
disable any auto-discovered source you don't want.
And it prunes itself. A source that fails five polls in a row stops being one. If it never carried a single story it is deleted outright β a catalog that grows by itself otherwise fills with feeds that 404 and gets re-asked forever. If it published, it is retired instead: no longer polled, marked π« in Sources, everything it gathered still readable, and βΆ puts it back if the feed returns. Sources somebody added by hand are always retired rather than deleted. Automatic repair gets its attempt first, so a feed that merely moved is rewired rather than dropped.
A feed answering isn't the same as a feed carrying news. One that
has been polled and never produced an article is marked
πΈ nothing yet β search Sources for silent to list
them, or retired for the ones that have stopped. π€ Settings β
Service health counts both, which is how you tell a catalog of a thousand
working sources from a thousand rows.
For matching, each new article's page is fetched once and reduced to text, so criteria see the whole story, not just the headline.
π Favourite locations are a standing interest rather than a filter.
A place plus a radius marks matching articles everywhere they appear
β in every feed and alert, not only the location's own β so a story you
would otherwise have skimmed past in a general column announces itself.
They also share one π Favourite Locations column, whose areas are
OR'd β so watching a dozen places costs one column, not a dozen.
Place lookup answers from D.E.L.P.H.I.'s own gazetteer first β about
480 cities and 154 countries, instantly and without asking anyone
else. Anything it doesn't know (a street address, a town, a district)
is looked up through OpenStreetMap and listed below the local
matches, marked π and credited. That request is made by this server,
never by your browser, so the outside service sees D.E.L.P.H.I. and
not you. Self-hosting and would rather it never happened?
NEWS_GEOCODER=off keeps everything local, and
NEWS_NOMINATIM_URL points at your own instance.
Paywalled outlets. Mark a source π paywalled when adding or editing it (the article page is behind a paywall, but the RSS feed's headlines and summaries usually aren't). Delphi then ingests those headlines and summaries β enough to match feeds and alerts on β but skips fetching the locked article body, so nothing is polluted with paywall stubs. A row from a paywalled source is marked π, and opening it offers π archive.ph beside the outlet's own link β typically a readable snapshot of the story.
Retention: articles are kept for 30 days by default, then pruned to
keep the system fast (self-hosting: NEWS_RETENTION_DAYS, 0 =
keep forever). Date-range feeds can only reach back as far as retention.
An area is the strictest filter D.E.L.P.H.I. offers: only news it can geolocate inside the shape matches. Location comes from the places named in the article, falling back to the outlet's own country when the text names nowhere in particular.
Geotagging covers all 154 countries plus ~480 major world cities, native-script names included, so ζ±δΊ¬ and Ψ§ΩΩΨ§ΩΨ±Ψ© are recognized as readily as their English spellings. (That figure is separate from the ~500 city sources above: one is what Delphi can recognize in an article, the other is what it subscribes to.) A city with no exact coordinates sits at its country's centre β approximate on the map, but never in the wrong country.
Areas work identically for alerts, which is where they earn their keep: "tell me about anything Critical inside this box" is the classic use.
Pick a reading language in π€ Settings (defaults to your browser's). Articles in other languages are machine-translated on the fly and marked "π translated from XX"; translations are cached so each article is translated once. Choose "Original languages" to turn it off.
Each article's language is detected from its text, not taken from its source's setting β so a foreign-language story from an English-tagged aggregator or an auto-discovered outlet still translates correctly. (If a translation call to the provider fails, the original is shown; it retries on the next load.)
Because nobody has flown it yet. The federal agencies map a perimeter for fires big enough to be worth the flight, and most fires never are. Rather than show nothing, Delphi draws a dashed circle showing the approximate area burned, worked out from the reported acreage.
The two are deliberately drawn differently and they are different claims. A mapped perimeter is solid: it says where the fire's edge is. The circle is dashed and hollow: it says how much has burned and nothing at all about the shape, or which way the fire has run. A hundred-thousand-acre fire is a circle about eleven kilometres across, and the real burn is never that neat.
A perimeter is also not as live as the fire it belongs to. Acreage updates with every situation report; the outline updates when somebody flies it, which for a big fire is roughly nightly. The popup gives the outline's own date for that reason.
Because it was worked out here rather than published by an agency, and the difference is worth knowing.
Inside the United States, readings come from AirNow β the
EPA's own regulatory monitors, reporting a finished AQI on the published
scale. Those say AQI 42 Β· Good with no caveat.
Everywhere else, readings come from OpenAQ, which aggregates government monitors worldwide but publishes a raw measurement rather than an index. Delphi converts it using the EPA's breakpoint table β but that table is defined over a 24-hour average for particulates and an 8-hour average for ozone, and what we have is one recent reading. The category is meaningful; the number is not the official AQI, so it says so.
Community sensors (PurpleAir, where an operator has supplied a key) say more than that. A light-scattering sensor on somebody's fence over-reads, and over-reads more in damp air, so the EPA's published humidity correction is applied and the popup shows the raw figure beside the corrected one. Sensors the network itself doubts, and sensors indoors, are dropped. Where a regulatory monitor is in range of your place, it always wins β the community network's value is coverage between the good instruments, not a rival reading beside one.
Two scales are never averaged together. A place reports one network, and says which.
It counts topics you filed, tagged with themes you chose. Nothing is inferred from your news feeds and nothing is counted that a person did not confirm β the upload step suggests themes from your keywords, and every suggestion is a toggle you press before anything is saved. A coverage figure is only worth reading if somebody agreed to the tags behind it.
Everyone in the Pantheon can see what has been filed and file their own. Owners and admins manage the theme list, because a theme is what the figures are counted in and renaming one silently changes every number on the board. You can remove a document you filed; an admin can remove any.
The documents themselves are never stored. A .docx is a
zip of XML, and both halves are unpacked in your own browser. Only the
structure you confirmed is sent. The original is never uploaded and
never stored β Delphi holds no copy of it and there is nothing to
download back.
Deleting a theme removes it from every topic already tagged with it, and its column of figures goes too. That is not recoverable β the tag is gone, not hidden.
An empty layer and a broken one used to look identical, so the map now says which it is directly under the switches, and π€ Settings β π©Ί Instance carries the same in one line.
The usual reasons: nothing reported in this view (the honest and
most common one β pan or zoom out); this instance has no API key for
that provider, which an operator fixes in a minute; the provider could not
be reached; or the whole feature is switched off with
NEWS_HAZARDS=0.
Wildfires are United States only, from the federal interagency feed, and the layer's label says so. Earthquakes, storms, floods, volcanoes and droughts are worldwide. Severe weather is United States only and only the warnings that carry an actual polygon, which is the sharp-edged half β tornado, severe thunderstorm, flash flood.
Community air sensors only appear near a saved place. That network has tens of thousands of sensors and Delphi asks only about the ground around locations somebody is watching, so a cluster of them by your places and none elsewhere is correct rather than a fault.
A Pantheon is an organization inside Delphi β a named group of accounts with a board of its own, sitting in the view switcher beside π Home and π My feeds.
Sharing copies rather than moves. Sharing a feed, alert, or favourite location puts a copy on the Pantheon's board for every member, tagged with who shared it; your original stays yours and the two are independent from then on. Shared alerts fire live for all members, and their history β including what has been marked seen β is shared triage rather than one person's. Any member can π a shared feed to take an editable copy back to their own board.
Visibility & access limits: a Pantheon is π private (invitation only) or π public (listed in the panel's directory, anyone can join). Owner and admins can also restrict who can invite and who can share to admins only. Roles: π owner (settings, roles, delete, ownership transfer), π‘ admins (invite, manage members, edit/remove anything shared), π€ members. Editing or removing a shared item is limited to whoever shared it plus owner/admins.
Private to your account: feeds, alerts and their history, viewed-event dimming β unless you deliberately share them with a Pantheon. Sign in with username or email from any device.
Shared by everyone on this server: the article database and the source catalog β one ingestion pipeline feeds all users, and any user can add or edit sources. Display preferences (theme, timestamps, sound, reading language) are saved to your account and follow you across devices.
This dialog opens by itself on your first visit, and again whenever you return after a week or more away, showing the π How to tab β a quick refresher costs nothing.
If anything shipped since you last saw it, a π What's new popup lists every update you missed, grouped by date (miss three updates, see all three). This works live: sessions that are already open β even idle in a background tab β get the popup within minutes of an update landing, no re-login needed. Delphi tracks exactly which entries each account has been shown, so it works across devices and catches same-day changes.
Both are always available on demand: β in the top-right corner opens this help, and π€ β Help has the same buttons.
Start from the symptom. Each heading is something you might be seeing; underneath is why it happens and what to do.
Open it (β) and use Preview matches while removing one filter at a time β the culprit is usually an over-tight combination rather than any one criterion. For niche topics make sure the π worldwide-coverage box is ticked, then press β³ Refresh now above and give it a cycle or two.
Restricting to specific sources is the commonest single cause: it combines with your other filters rather than replacing them, so a feed narrowed to three outlets and asking for a keyword returns only that keyword from those three outlets.
If the column says every match has been hidden as stale, that is the π° setting β raise or clear Hide events with no updates for in π€ Settings.
Check the articles (24h) and sources healthy tiles at the top of the board. A tile reading β¦/N means the first poll since startup has not finished yet.
Articles older than 30 days are removed to keep the archive fast, so a feed about something that has gone quiet empties out over time rather than keeping its old coverage.
β³ says a poll is already running: the rolling poller is mid-cycle. Only one runs at a time, so results land when the one in flight finishes β usually within seconds.
Alerts are tested as articles arrive, not retroactively. A new alert says nothing about what is already in the archive β to see whether its criteria are right, open it with β and use Preview matches, which runs them against everything already ingested.
Confirm the alert is active, and remember that every criterion has to match at once: an alert with a keyword and a country and a minimum importance fires only on articles satisfying all three.
Emails not arriving: out-of-app delivery needs SMTP configured on the server. Without it, βοΈ Email me stays silent and the alert still fires normally in the dashboard.
Hover it in Sources for the exact error, and note that Delphi tries to fix these itself. After two failed polls with a permanent-looking error (403/404, "not a feed", parse errors), it hunts for the outlet's real feed β homepage autodiscovery, common feed paths, then a Google News feed scoped to the outlet's domain as a last resort β validates the candidate, and switches over (marked "π§ repaired"; the original URL is kept in the tooltip).
Press π§ on any failing source to force an attempt right now. 429 just means the host is rate-limiting and backs off on its own. If repair finds nothing, the outlet is likely gone β edit the URL in place or delete the source.
Quoted phrases match exactly, on whole words β "crypto
mine" will not match "crypto mining". Use * for a word
stem (crypto*) or list the variants with OR.
Delphi searches only what it has ingested from its own sources, and matches the headline, the feed's summary, and the article body where it could be fetched. Paywalled outlets are stored headline-only by design, so their coverage matches on the headline alone.
The server didn't answer within 30 seconds and that column had nothing cached to fall back on. A column that has loaded before keeps its last contents and says they're stale instead, so this is what a first load looks like when the server is struggling.
Every response carries a Server-Timing header with how long the
server itself took β visible in your browser's network panel β and the
server logs a warning for any request over 3 seconds
(NEWS_SLOW_REQUEST_S), naming the path. If every path is slow,
the machine is short of CPU; if one is, that feed's criteria are expensive.
Self-hosting on a shared vCPU is the usual answer: continuous ingestion
spends the burst allowance and everything is throttled after that.
When Delphi hits a bug it can't handle, it writes the failure to the server's log with a short code and shows you the same code β for example (reference 4f2a1c). Quote it when reporting the problem and whoever runs this server can find the exact failure, with its full stack trace, instead of guessing from a description.
A message like that always means nothing was saved. It is safe to try the same thing again; if it fails the same way twice, the second reference is worth quoting too, because it proves it is repeatable rather than a one-off.
The code identifies one moment in the log and nothing else β it is not an account number and reveals nothing about you.
Delphi holds an open connection to the server so alerts can arrive the moment they fire. If that connection drops, this banner appears above the board β and while it is showing, alerts will not reach this tab and columns stop refreshing by themselves.
Brief drops are normal and silent: deploying an update severs the connection, as does a laptop going to sleep. The banner only appears after several failed reconnections, which means something is actually wrong β usually the server restarting, a proxy that closes idle connections, or a network that blocks streaming responses.
Reloading the page is the fix in nearly every case. News is still being collected on the server throughout, so nothing is missed permanently β the board catches up as soon as it reconnects.
Verification and password-reset messages need SMTP configured on the server. If it isn't, Delphi says so where you asked rather than pretending a message is on its way, and new accounts are verified automatically instead.
If mail is configured but nothing arrives, an operator can see the reason under Service health in the operator console β it names which setting the relay objected to (credentials, the From address, the port and encryption combination) rather than only recording it in the log.
Reset links are valid for one hour. Requesting a new one invalidates nothing, so if you're unsure how old a link is, just ask for another.
Columns are dragged by their right edge only. Take hold of the right border of the column you want to change β the line lights up gold when you are on it β and drag. Double-click that edge to reset the column to the default width, or focus it and use the arrow keys (hold Shift for bigger steps).
Widths run from 240 to 1000 pixels, and are saved to your account rather than to the feed, so they follow you between devices and never move anyone else's layout on a shared Pantheon board.
Create a feed to start monitoring news β filter by country, category, keywords, Boolean searches, importance, or an area you draw on the map. Or open π Home for Delphi's curated overview, and press π on any column there to make a copy of it your own.
What should this watch for? A name and a couple of keywords are enough to start; Boolean searches are there when you need to be precise. Only the name is required β leave the rest empty and the feed matches all the news there is.
Narrow to places β or skip this step entirely for worldwide coverage. Countries match where the news is about (mentioned places or the outlet's home). Drawing on the map is the strictest filter: only news geolocated inside the shape matches.
Optional refinements. Anything left untouched stays wide open.
Check the summary, preview the live match count, pick how it displays, and save.
Delphi polls the feed on its own schedule and adds whatever it publishes. If the URL turns out not to be a feed, the source is left in place and marked broken β π§ in the list tries to find the outlet's real feed.
Athena maps what your group has actually covered. File the reports you write and the source notes behind them, tag each item against themes of your own choosing, and the coverage grid shows how often each theme has come up, week by week.
It answers the question a stack of weekly reports cannot: not what did we say in March, but what have we been circling for three months without noticing β and what has gone quiet.
.docx, .md
or .txt. Its headings become topics and its links
become sources. Themes are suggested from the keywords you gave
them, and you confirm every one before anything is filed.Your documents never leave your browser. The file is opened, read and discarded on your own machine; only the topics, themes and links you confirmed are sent to Delphi. Everyone in this Pantheon can see what has been filed and file their own.
Members share feeds and alerts here. A Pantheon gets its own board beside π Home and π My feeds, and shared alerts fire for everyone in it.
Only the owner and admins can change these.
Your other signed-in devices will be signed out β that is usually the reason for changing a password. This browser stays signed in, because you have just proved the current one.
Extract only β open the original for the rest.