Periodisk
An open-source Python package for generating accessible, source-traceable periodic tables for chemistry teaching in SVG and PDF formats. Version 2026.1 includes an offline, 118-element dataset, with British English and Norwegian Bokmål localisation.
See DATA_SOURCES.md for data sources, scientific citations, and known limitations.
Examples
Print-ready PDFs and editable SVGs are available in examples/.
They are grouped by locale and file format:
examples/
├── en_GB/
│ ├── pdf/
│ └── svg/
└── nb_NO/
├── pdf/
└── svg/
The examples include selected colour schemes and cell styles, plus simplified
tables (using the broad classes metals, metalloids, nonmetals, and noble gases).
See examples/README.md for the inventory and filename
conventions, or compare all selectable colour schemes.
Installing
Install the package from the repository root:
python -m pip install .
Usage
To render a table from the command line (the output format is
inferred from the .svg or .pdf suffix):
periodisk render periodic-table.pdf --language en_GB --page-size A3
or to change the language and style:
periodisk render periodesystemet.pdf --language nb_NO --content simplified --classification broad --colour-scheme broad-light
The equivalent Python API is:
from periodisk import render_table
render_table(
"periodic-table.pdf",
language="en_GB",
page_size="A3",
)
The default uses the Tol Light–inspired colour scheme and the full scientific content. Useful options include:
--language en_GB|nb_NOand--page-size A3|A4--colour-schemefor selectable palettes--content full|simplified--classification detailed|broad--cell-style full|gutters|soft-rulesand--rounded-corners--electronegativity-scale pauling|allred-rochow|allen
Run periodisk render --help for the complete set of choices. See
DESIGN.md for palette and layout details and
LOCALISATION.md for language support.
Development
The project supports Python 3.13 and 3.14. Its release policy is to support the two most recent stable CPython versions that are still receiving regular bug fixes.
Install the development dependencies and run the checks from the repository root:
python -m pip install -e '.[dev]'
python -m periodisk validate --release
python -m pytest
ruff check .
ruff format --check .
Ruff checks the Python code for common errors and style problems and enforces
consistent formatting. Run ruff check --fix . followed by ruff format .
before submitting changes.
The radioactive sign is native vector geometry and requires no separately installed symbol font. Regenerate the web palette preview after changing palette definitions with:
PYTHONPATH=src python scripts/render_palette_preview.py
Scientific data
Scientific data are stored locally as JSON. Runtime generation will therefore
never need to query Mendeleev or another online service. Sourced scientific
values carry identifiers from sources.json; editorial classifications and
translations are documented separately. First ionisation energies use
kJ/mol. See DATA_SOURCES.md for sources, curation
methods, and known limitations.
Versioning
Releases use a calendar-based YYYY.N scheme. YYYY is the release year and
N counts releases within that year; for example, 2026.1 is the first 2026
release.
Licence
The project uses a simple dual-licence arrangement:
- Python source code is licensed under the MIT License.
- Original documentation and rendered periodic tables are licensed under CC BY 4.0.
The CC BY licence covers the project's original presentation and explanatory material, including the editorial arrangement of the rendered tables. It does not claim ownership of scientific facts or relicense third-party source material. Rendered tables include a short CC BY notice, while their source footer identifies the scientific provenance. Source-specific attribution and licensing information is recorded in THIRD_PARTY_NOTICES.md.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file periodisk-2026.1.tar.gz.
File metadata
- Download URL: periodisk-2026.1.tar.gz
- Upload date:
- Size: 43.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec806c622318ba03d5f0121c3bed5ca5e42771128516c1886f2c1fdbdf030bd4
|
|
| MD5 |
e238d0dac9b83c6cbc3f4eb2af8816b0
|
|
| BLAKE2b-256 |
6b789452ab8603c955e95ee3249ab243de95dfa39306028e7f7aa54abdf645e6
|
Provenance
The following attestation bundles were made for periodisk-2026.1.tar.gz:
Publisher:
release.yml on periodisk/periodisk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
periodisk-2026.1.tar.gz -
Subject digest:
ec806c622318ba03d5f0121c3bed5ca5e42771128516c1886f2c1fdbdf030bd4 - Sigstore transparency entry: 2466501064
- Sigstore integration time:
-
Permalink:
periodisk/periodisk@f7862f039c542f52159a70822fec8cddad0ace03 -
Branch / Tag:
refs/tags/v2026.1 - Owner: https://github.com/periodisk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f7862f039c542f52159a70822fec8cddad0ace03 -
Trigger Event:
release
-
Statement type:
File details
Details for the file periodisk-2026.1-py3-none-any.whl.
File metadata
- Download URL: periodisk-2026.1-py3-none-any.whl
- Upload date:
- Size: 40.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8abf802cf5d31274206d983f400f1f205adec75e06da78aa9668b2237098067f
|
|
| MD5 |
5e15acaae60c01bb327fba80dae5d124
|
|
| BLAKE2b-256 |
6cbcd73c58a63cf8d5d4cc632c7feb21c244fa739a2afc92ac73cad0ef022110
|
Provenance
The following attestation bundles were made for periodisk-2026.1-py3-none-any.whl:
Publisher:
release.yml on periodisk/periodisk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
periodisk-2026.1-py3-none-any.whl -
Subject digest:
8abf802cf5d31274206d983f400f1f205adec75e06da78aa9668b2237098067f - Sigstore transparency entry: 2466501071
- Sigstore integration time:
-
Permalink:
periodisk/periodisk@f7862f039c542f52159a70822fec8cddad0ace03 -
Branch / Tag:
refs/tags/v2026.1 - Owner: https://github.com/periodisk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f7862f039c542f52159a70822fec8cddad0ace03 -
Trigger Event:
release
-
Statement type: