← Back to the calculator
English

Data Sources and Licences

Effective date
2026-08-01
Document version
v2.0.0

Operator or commercial-policy values are not configured. This draft must be completed before commercial launch.

This calculator runs on data and software made by other people. For some of it, crediting the source is a licence obligation. This page is that credit.

At a glance

The service does not call any external server while it calculates. The astronomy, time-zone and city data it needs are turned into static tables ahead of time and shipped inside the deployment. Everything below sits in the same server image the service runs from.

Data or softwareLicenceUsed for
GeoNames cities500 CC BY 4.0 City name β†’ coordinates and IANA time zone
IANA Time Zone Database (2026c) Public domain Local standard time β†’ UTC, daylight-saving history
astronomy-engine 2.1.19 MIT Solar longitude β†’ the 24 solar-term boundary moments
Noto Serif KR (104-glyph Han subset) SIL OFL 1.1 Rendering the pillar characters. Self-hosted, no external request. Full licence text
KASI solar-term and lunar-calendar APIs Published on Korea’s public data portal under terms set by the provider Cross-checking our own computed values (build time only)
Open-source software See the software dependencies table below Running the server and the screen

GeoNames city data

The data has been modified. We do not redistribute the original file. We convert the cities500.txt dump into a SQLite database, normalise the alternate spellings of each city into a separate table so they can be searched, and add prefix indexes. That derived database is what ships: 235,046 cities and 873,241 alternate names, about 49.5 MiB.

City search runs entirely inside that local database. No request goes out to GeoNames while you search, and the database has no table that records search terms. The connection is opened read-only and only reads.

IANA Time Zone Database

Standard time and daylight-saving history come from the IANA Time Zone Database (iana.org/time-zones), which is in the public domain. The service uses release IANA 2026c, pinned through the Python distribution package tzdata 2026.3. The code of that packaging project itself is under the Apache License 2.0.

Why the version is pinned. This database is updated several times a year, and past periods get corrected retroactively too. The same birth date must not produce one chart last month and a different one this month, so the version is pinned and recorded with the result.

What this data cannot tell us. Zones are split by whether they have agreed since 1970. Places that differed before 1970 can therefore sit in the same zone. For births in that period the time zone itself is uncertain in the source data, and that is not something this service can fix.

Astronomy β€” astronomy-engine

A solar term begins at a specific solar longitude. That calculation uses astronomy-engine 2.1.19, licensed under MIT.

It runs once, at build time. The 4,872 solar-term boundary moments from 1899 to 2101 are computed in advance into a table, and a live request only looks that table up. The resulting table is our own output, not a redistribution of astronomy-engine.

KASI solar-term and lunar-calendar data

We used the 24-solar-term service and the lunar-calendar service published by the Korea Astronomy and Space Science Institute (KASI) through Korea’s public data portal (data.go.kr). Use is subject to the terms set by the providing institution.

The purpose was cross-checking. We compared our own computed solar-term moments and day pillars against KASI’s values and kept a record of where they diverge, including a list of the defects we confirmed. Our own computed table remains the authoritative one.

The running service never calls the KASI API. The API key is not included in the deployment or in the repository.

What we deliberately did not use

What is absent is also a licensing fact, so it belongs here. Neither of the two below was rejected for lack of capability. They were left out because this service cannot meet the conditions their licences attach.

As a result, nothing in the deployment carries an AGPL or ODbL obligation. That is licence compliance rather than licence avoidance: we do not use code or data whose conditions we cannot actually honour.

Software dependencies

The main open-source components are listed below. The authoritative text is the licence shipped with each package; the versions are pinned in requirements.txt and frontend/package.json.

NameLicenceUsed for
PythonPSF LicenseServer runtime
FastAPIMITWeb API
StarletteBSD 3-ClauseWeb layer underneath FastAPI
UvicornBSD 3-ClauseWeb server
PydanticMITRequest and response validation
Jinja2BSD 3-ClauseServer rendering, including this page
RequestsApache-2.0Fetching data at build time
tzdata (Python package)Apache-2.0Distributing the IANA time-zone data
OpenAI Python SDKApache-2.0Only used when the wording feature is switched on
httpxBSD 3-ClauseTests only
React Β· React DOMMITThe calculator screen
ViteMITFront-end build
TypeScriptApache-2.0Front-end tooling

Every script, stylesheet, font and image the calculator screen loads is served by this server. No front-end asset is fetched from an external CDN, so your browser never sends a request to a third-party host. One third-party work is bundled: Noto Serif KR, the typeface used for the pillar characters. Because we redistribute it by self-hosting, its licence is credited in the table above (SIL Open Font License 1.1). Only the 104 Han characters this calculator can display are included.

What this service wrote itself

The sexagenary tables, the judgment rules, the natal and period interpretation rules and their wording, and the translations into four languages were written for this service. The traditional method itself is not a work with an identifiable author, but the decisions about how to implement it and the sentences that reach the screen are ours.

An external language model may be used to smooth the wording of those fixed rule sentences. That model does no calculation and makes no judgment. The Disclaimer explains this in detail.

This page credits sources; it does not grant you a licence. What you may do with the results and the interpretation text is set out in the Terms of Service.

If a credit is missing

If an attribution or a licence statement here is missing or wrong, please tell us and we will check it and fix it. The Contact page has the details.

This list is updated whenever the components change. The effective date and version of this document are at the top of the page.