Skip to main content

Design Automation for Field-coupled Nanotechnologies

Project description

fiction – Design Automation for Field-coupled Nanotechnologies

Ubuntu CI macOS CI Windows CI Python Bindings Docker Image CodeQL Documentation Status codecov License PyPI Release arXiv

This code base provides a C++17 framework for field-coupled technology-independent open nanocomputing developed as part of the Munich Nanotech Toolkit (MNT) by the Chair for Design Automation at the Technical University of Munich. Within fiction, algorithms for logic synthesis, placement, routing, clocking, verification, and simulation for Field-coupled Nanocomputing (FCN) technologies are implemented.

To this end, most physical design tasks can be performed on generic data structures that abstract from particular technology or cell design. Using an extensible set of gate libraries, technologies, and cell types, these can easily be compiled down to any desired FCN technology for physical simulation.

For these use cases, fiction provides a C++ header-only library as well as Python bindings that provide data types and algorithms for recurring tasks, e.g., logic network and layout types on different abstraction levels, clocking schemes, gate libraries, design automation algorithms, etc. Additionally, fiction comes with an ABC-like CLI tool that allows quick access to its core functionality.

Documentation

If you have any questions, feel free to contact us via nanotech.cda@xcit.tum.de or by creating an issue on GitHub.

Quick Start (C++)

Clone the repository and its submodules:

git clone --recursive https://github.com/cda-tum/fiction.git

The CLI

Inside the newly cloned fiction folder, trigger the build process:

cmake . -B build
cd build
cmake --build . -j4

Run the CLI tool:

cli/fiction

Here is an example of running fiction to perform a full physical design flow on a QCA circuit layout that can afterward be simulated in QCADesigner:

CLI example

The Header-only Library

Add fiction as a sub-directory to your CMake project and link against libfiction (assuming your project is called fanfiction):

add_subdirectory(fiction/)
target_link_libraries(fanfiction libfiction)

Include the headers you need:

#include <fiction/layouts/cell_level_layout.hpp>
#include <fiction/layouts/clocking_scheme.hpp>
#include <fiction/technology/qca_one_library.hpp>
#include <fiction/io/write_qca_layout.hpp>
#include <fiction/...>

Quick Start (Python)

Install the Python bindings from PyPI:

pip install mnt.pyfiction

Import the bindings:

from mnt import pyfiction

For a full getting started guide, please refer to the documentation.

Supported Technologies

Physical design in fiction can be performed technology-independent. Only if resulted layouts are to be physically, simulated, a specific technology implementation is required. To this end, fiction supports various potential FCN implementations together with gate libraries to compile gate-level layout abstractions down to the cell level. Additionally, output formats for external physical simulator engines are also supported.

Quantum-dot Cellular Automata (QCA)

QCA cells

Gate libraries:

File formats:

Many thanks to Frank Sill Torres for his support with the QCADesigner format, to Willem Lambooy for his support with the QCA-STACK format, and to Sophia Kuhn for implementing the SVG writer!

in-plane Nanomagnet Logic (iNML)

iNML cells

Gate libraries:

File formats:

Many thanks to Umberto Garlando, Fabrizio Riente, and Giuliana Beretta for their support!

Silicon Dangling Bonds (SiDBs)

SiDB cells

Gate libraries:

File formats:

Many thanks to Samuel Sze Hang Ng for his support!

Implemented Design Automation Algorithms

The fiction framework provides implementations of state-of-the-art design automation algorithms for FCN technologies. These algorithms can be used in evaluation scripts to perform logic synthesis, physical design, layout verification, and physical simulation.

Logic Synthesis

For logic synthesis, fiction relies on the mockturtle library that offers a multitude of logic network types and optimization algorithms. Logic synthesis can be performed in external tools and resulting Verilog/AIGER/BLIF/... files can be parsed by fiction. Alternatively, since mockturtle is included in fiction, synthesis can be applied in the same evaluation script.

Physical Design

For automatic FCN layout obtainment, fiction provides algorithms that receive mockturtle logic networks as input specification and output placed, routed, and clocked generic FCN circuits.

QCA Layout

Among these algorithms are

plus several path-finding algorithms that work on generic layouts:

On top, there is a hexagonalization algorithm to transform Cartesian layouts suitable for QCA into hexagonal layouts suitable for SiDBs, and multiple algorithms to optimize gate-level layouts post-placement:

Verification

Layout correctness can be validated using

Physical Simulation

SiDB simulation result

When a layout is compiled to the cell level via the application of a technology-dependent gate library, it can be simulated using a physical model. Currently, the following simulation algorithms are implemented in fiction:

Clocking Schemes

Regular clocking schemes have been proposed in the FCN literature, which can be used as a floor plans for physical design. However, sometimes it can make sense to have more freedom and assign clock numbers on the fly. That is why fiction supports both regular and irregular clocking schemes with variable amounts of clock numbers as QCA for instance uses four clock phases but iNML needs only three.

Built-in schemes are

Columnar Row 2DDWave
Columnar Row 2DDWave
USE RES ESR
USE RES ESR
CFE Ripple BANCS
CFE Ripple BANCS

plus the mentioned irregular open clocking that works via a clock map instead of a regular extrapolated cutout.

Wire Crossings

Second layer crossing

With many FCN technologies considered planar, wire crossings should be minimized if possible. However, there are some options in QCA where, using a second layer, crossings over short distances and co-planar rotated cells become possible. As both are just technical implementations of the same concept, fiction supports crossings as wires in a second grid layer in its data structures for all FCN technologies. They will also be represented as such in corresponding SVG and QCADesigner output. However, note that it is to be interpreted as the concept of crossings and could also be realized co-planar.

Wires are only allowed to cross other wires! Wires crossing gates is considered to lead to unstable signals.

Gate Pins vs. Designated I/Os

Input pin and cell output

In the literature, both are seen: having input cells (pins) directly located in the gate structure or using designated I/O elements that are located outside of gates. This distinction only makes sense on the gate level and fiction supports both approaches and offers usage in the implemented physical design algorithms.

Multi Wires

Multi wires

Gate-level abstraction has its limits. Often, chip area is wasted when only using a single wire per tile. In fiction, cell-level layouts allow for precise control over cell placement and can, thus, also create multiple wire segments per clock zone. Physical simulation can give an indication of whether the built structures are implementing the intended functionality.

Synchronization Elements

Synchronization element

A technology extension proposes to utilize the external clock signal generator in an unconventional way: by creating further asymmetric clock signals with extended Hold phases that are assigned to specific wire tiles, synchronization elements can be created that stall signals over multiple clock cycles. These artificial latches are able to feed information to any other clock number, but their usage reduces the overall throughput of the layout. In return, long wire detours for signal synchronization can be prevented.

Cost Metrics

Designed layouts can be evaluated with regard to several cost functions. The following metrics are currently implemented:

Gate-level layouts:

  • Circuit dimension in tiles
  • Number of gate tiles
  • Number of wire tiles
  • Number of wire crossings
  • Number of synchronization elements
  • Critical path
  • Throughput
  • Bounding box
  • Energy dissipation based on a physical model (QCA only)

Cell-level layouts:

  • Circuit dimension in cells
  • Number of cells
  • Bounding box
  • Area usage in nm²

Benchmark Library

To objectively evaluate and compare software and design automation tools, MNT Bench provides gate-level layouts for various gate libraries and clocking schemes, generated using the latest physical design and optimization algorithms, with fiction offering the corresponding read and write utilities to generate gate-level layouts from gate-level layout files (.fgl) and vice versa.

Additionally, the benchmarks folder contains the function descriptions of frequently used benchmark sets in Verilog format (.v) provided by MNT Bench.

Reference

Since fiction is academic software, we would be thankful if you referred to it by citing the following publication:

@misc{fiction,
      author = {Walter, Marcel and Wille, Robert and Sill Torres, Frank and Gro{\ss}e, Daniel and Drechsler, Rolf},
      title = {{fiction: An Open Source Framework for the Design of Field-coupled Nanocomputing Circuits}},
      archivePrefix = {arXiv},
      eprint = {1905.02477},
      note = {arXiv:1905.02477},
      year = {2019},
      month = {May}
}

Additionally, many algorithms implemented in fiction have been published individually. For a full list of publications, please refer to the documentation.

Acknowledgements

The Munich Nanotech Toolkit has been supported by the Bavarian State Ministry for Science and Arts through the Distinguished Professorship Program.

TUM Logo       Coat of Arms of Bavaria

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mnt_pyfiction-0.6.1.tar.gz (12.8 MB view details)

Uploaded Source

Built Distributions

mnt.pyfiction-0.6.1-cp312-cp312-win_amd64.whl (9.3 MB view details)

Uploaded CPython 3.12 Windows x86-64

mnt.pyfiction-0.6.1-cp312-cp312-manylinux_2_28_x86_64.whl (14.5 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.6.1-cp312-cp312-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

mnt.pyfiction-0.6.1-cp312-cp312-macosx_10_15_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.12 macOS 10.15+ x86-64

mnt.pyfiction-0.6.1-cp311-cp311-win_amd64.whl (9.3 MB view details)

Uploaded CPython 3.11 Windows x86-64

mnt.pyfiction-0.6.1-cp311-cp311-manylinux_2_28_x86_64.whl (14.5 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.6.1-cp311-cp311-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

mnt.pyfiction-0.6.1-cp311-cp311-macosx_10_15_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.11 macOS 10.15+ x86-64

mnt.pyfiction-0.6.1-cp310-cp310-win_amd64.whl (9.3 MB view details)

Uploaded CPython 3.10 Windows x86-64

mnt.pyfiction-0.6.1-cp310-cp310-manylinux_2_28_x86_64.whl (14.5 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.6.1-cp310-cp310-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

mnt.pyfiction-0.6.1-cp310-cp310-macosx_10_15_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

mnt.pyfiction-0.6.1-cp39-cp39-win_amd64.whl (9.3 MB view details)

Uploaded CPython 3.9 Windows x86-64

mnt.pyfiction-0.6.1-cp39-cp39-manylinux_2_28_x86_64.whl (14.5 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.6.1-cp39-cp39-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

mnt.pyfiction-0.6.1-cp39-cp39-macosx_10_15_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

mnt.pyfiction-0.6.1-cp38-cp38-win_amd64.whl (9.3 MB view details)

Uploaded CPython 3.8 Windows x86-64

mnt.pyfiction-0.6.1-cp38-cp38-manylinux_2_28_x86_64.whl (14.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.28+ x86-64

mnt.pyfiction-0.6.1-cp38-cp38-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

mnt.pyfiction-0.6.1-cp38-cp38-macosx_10_15_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

File details

Details for the file mnt_pyfiction-0.6.1.tar.gz.

File metadata

  • Download URL: mnt_pyfiction-0.6.1.tar.gz
  • Upload date:
  • Size: 12.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for mnt_pyfiction-0.6.1.tar.gz
Algorithm Hash digest
SHA256 ab91d92edf6e47615a6fe5976062ea9d03bb8ab70381a6d739198754ae24ad4e
MD5 772757737099cffcac50669e4c911ffa
BLAKE2b-256 11ae37c8c4b4c025530b6b07a4a6d944369c530041534488eea7c89bebfdc531

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 993b940c4b4564cd37cfbb3368cffb505f04b8a7c10b4f6d2317e4915ea2f722
MD5 36a78f7ec48463bb8f744f495e0b04f6
BLAKE2b-256 bea8d04c19abc784c12f3f5f37b5898234cf33ec3b3b34acba9e129758402b47

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d5a7f36c9706a7a6354573028993140a6c13767e1f26382eb658d7edb42eedab
MD5 cad2afc190bd765362eb35e8af06556d
BLAKE2b-256 bcbb0b5d663f3317b8abe763de92bd9d994169845ca2170ef2e476ad50b28447

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76ff340c85f51711370aecd8e0f64b25c0051fa1c0cb1e4c1d6a4139f80d5689
MD5 94d2945243e2195f665d83f88bdf0d47
BLAKE2b-256 4e7ab030298324846e133ec98508482bea6048a359d72066def47f06d79aa365

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp312-cp312-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp312-cp312-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 637f9a818000022005dadb54b2f09eedcd92ca14262170c822213726dacf8582
MD5 28edd4bed546fedbd8ecc02c4c33fa06
BLAKE2b-256 ad5db31a28163715a036163ddaf14e042ecdaacee0ac43aa1140085ac6a41ff1

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 20483ab7e31313afba53d1860303466975691168957696d10471f86f3013ae56
MD5 cbbaafe0dd3731968c36b4e7361e3341
BLAKE2b-256 9f24f200141e5267fd512e6d3e5527afb4418f6ec6fbade19579cf78b4932ced

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5e34cc70e78771bbd49cd42ab365784d5a23ebb56c8f1b064f4b74b903e493ad
MD5 3235122007b38d27d0a2c7819e503ad6
BLAKE2b-256 e1dcc2b5ce52c7d394909ab09f5381d64f6be86244e7f329fd180297835461bc

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be372bfff6239a449fdd5fd612c560a6752b315288cc714e372a323f1cf65792
MD5 76191b668f733cbbe65585789db6b32d
BLAKE2b-256 db7869fd9e3f5a26609df758d94d8875231a7bc06c1a0e104bbbeb86026e5198

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 550def8bf98647efac9e5dbc0675014c3d1bc5f8ad5ab355388eb7a95c2c567c
MD5 3bbf019207003edfa1c363623319ede2
BLAKE2b-256 7bd87572482ed09c0eb4993034499bd30e247c180407aab4292d3ebe105a274a

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b4983bd6b54025996d84776ed93290646912e57d903681b94daf0ebbee8c1168
MD5 69d07b76925fc701b7a878fa739ccc2f
BLAKE2b-256 e6c10f263f99204f8dc389b0f67e52636998dc9298552491ff5384f29d0a2484

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fec9b5451fa7aec69a45a6147ecf0eb6e13ce6f9d64d50564cfe95b879d89931
MD5 a930076116763d0304966b520bbb5f18
BLAKE2b-256 9e8f430d2faf13bcaae2b34e417407e426338dd8eba6ecfdbbbb8fcb406f0ca0

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3f6f09d8638035df7458341373952823d7b43abb477f59b356034078ece57322
MD5 f3ba582a7b93e28fb31a7971ef45cafd
BLAKE2b-256 1eb5f93c2a31e5b6c76c2175434117baec5943bb1449e2e0a026c927181afbfb

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0c60754e5cafd96f68115897331397ef7157922f876a075bbecfccf4e93720d5
MD5 a541793fcff2619a734c4d53972bbfc7
BLAKE2b-256 1cc1a36daba27c121a60d1d80f351e04caa5b9173775ddf7aff2f74328d081a5

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4e95a4ff6278efe6d38770030bacf92af9968938beb2b7bf64bfa9c8a5f9ccba
MD5 ea93da095ad8de98613511672fd19aa4
BLAKE2b-256 d875a78c636841f07bb9a0b75e3f14dc73fc94fcabf06c0bb556858d3aa30832

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4c4e221d1003fa698920848cb568968a20762181b936ab1eca651987c12ae769
MD5 4a916e2840fc5ee581bebe408b552197
BLAKE2b-256 886fbb775aedc0781186401b628a1e1284850088139de6ec4d0aa4bdb7f70b6a

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f35c7e998486ba3ab2221b6a7828088d8de44d2c209984e7d3f168fd031b843c
MD5 a40af1e3c12a31daf0da6f03748415a0
BLAKE2b-256 18d14b294fe2a4419edb64da31e1dfcdccd04ecc0044a015cbe8fccd835e3ac3

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 50318ba177111c9e798d3f2221655be6ce68fde5e9a4d6a34cae954cae47b313
MD5 fa8dc634ec45c5a605fff2857c92c4bb
BLAKE2b-256 c1771dd6498b162577494400ab97b7932d0687240d10eb6e240a43cb8f44569f

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 5ba4377c3a45961c20afbba007cf9b108344464ab62ec5bdb25210646e184596
MD5 62cb6c0bc61479d6f136868d4968e820
BLAKE2b-256 2163f364663cf98987a936b42835fdcdb26921ffb7fc0c77d52f26a551930b0e

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 caee060b5f3a9a7572fad890ec5fe65054c9ea239191780319b467499494f4cf
MD5 0c2909dfd913ed130d14d39d87cb7c49
BLAKE2b-256 4b12ea18ab994e3a97e465924f4fd376ee28a99068cc41480c6ad6941afea6d2

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d269016176065428efc28ad97662d244a86a12d901fcde4ac89624ad0a911fb
MD5 f0ae61ea8dd8863eda6780846b4763d4
BLAKE2b-256 c0a09a235822ddfeecf57c6d8ff98ee747bee7e31b16e7c2fc27f16a41dace93

See more details on using hashes here.

File details

Details for the file mnt.pyfiction-0.6.1-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mnt.pyfiction-0.6.1-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 14dc4e9d79d1bb9b3e2cfad99418ee2bbe9c413e6fa0040beddce3d8f594b372
MD5 d7629fef62afc29e7dc6defc682b1d4d
BLAKE2b-256 237f0242ce8b7c0ceb63dfd4394d93cd9a2c64cb412f8ea37eaaa7509991c306

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page