From 7625d7765283e9874a59f01ff9526822ad4a437e Mon Sep 17 00:00:00 2001 From: Alexander Jung Date: Wed, 13 Mar 2024 09:59:00 +0100 Subject: [PATCH] feat: Automatically update search results on deployment This commit introduces a script which scans and parses content in the docs and formats it in a way such that it is usable through the general search function. Signed-off-by: Alexander Jung --- Dockerfile | 4 +- configs/search-meta.json | 5724 ------------------------------------ scripts/get-search-meta.ts | 120 + 3 files changed, 123 insertions(+), 5725 deletions(-) delete mode 100644 configs/search-meta.json create mode 100644 scripts/get-search-meta.ts diff --git a/Dockerfile b/Dockerfile index 1cb36081..26eae5fc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,7 +38,9 @@ COPY . . ENV NEXT_TELEMETRY_DISABLED 1 -RUN npm run build --no-lint +RUN set -xe; \ + npm run search-meta:gen; \ + npm run build --no-lint # Production image, copy all the files and run next FROM base AS runner diff --git a/configs/search-meta.json b/configs/search-meta.json deleted file mode 100644 index 7b752304..00000000 --- a/configs/search-meta.json +++ /dev/null @@ -1,5724 +0,0 @@ -[ - { - "content": "Unleasing the Power of Unikernels", - "id": "//blog/2017-12-05-unleashing-unikernels", - "type": "lvl1", - "url": "/blog/2017-12-05-unleashing-unikernels", - "hierarchy": { "lvl1": "Unleasing the Power of Unikernels" } - }, - { - "content": "Getting Involved", - "id": "//blog/2017-12-05-unleashing-unikernels", - "type": "lvl2", - "url": "/blog/2017-12-05-unleashing-unikernels#getting-involved", - "hierarchy": { - "lvl1": "Unleasing the Power of Unikernels", - "lvl2": "Getting Involved", - "lvl3": null - } - }, - { - "content": "Xen Project Celebrates Unikraft Unikernel Project's One Year Anniversary", - "id": "//blog/2019-01-31-xen-project-celebrates", - "type": "lvl1", - "url": "/blog/2019-01-31-xen-project-celebrates", - "hierarchy": { - "lvl1": "Xen Project Celebrates Unikraft Unikernel Project's One Year Anniversary" - } - }, - { - "content": "Unikraft: Building Powerful Unikernels Has Never Been Easier!", - "id": "//blog/2020-02-17-building-powerful-unikernels", - "type": "lvl1", - "url": "/blog/2020-02-17-building-powerful-unikernels", - "hierarchy": { - "lvl1": "Unikraft: Building Powerful Unikernels Has Never Been Easier!" - } - }, - { - "content": "Unikraft: Fast, Specialized Unikernels the Easy Way", - "id": "//blog/2021-04-26-unikraft-at-eurosys", - "type": "lvl1", - "url": "/blog/2021-04-26-unikraft-at-eurosys", - "hierarchy": { - "lvl1": "Unikraft: Fast, Specialized Unikernels the Easy Way" - } - }, - { - "content": "Kicking off 2022 with a new site and release at FOSDEM!", - "id": "//blog/2022-02-05-new-site-and-unikraft-at-fosdem22", - "type": "lvl1", - "url": "/blog/2022-02-05-new-site-and-unikraft-at-fosdem22", - "hierarchy": { - "lvl1": "Kicking off 2022 with a new site and release at FOSDEM!" - } - }, - { - "content": "New release v0.7 (Mimas)", - "id": "//blog/2022-02-05-new-site-and-unikraft-at-fosdem22", - "type": "lvl3", - "url": "/blog/2022-02-05-new-site-and-unikraft-at-fosdem22#new-release-v07-mimas", - "hierarchy": { - "lvl1": "Kicking off 2022 with a new site and release at FOSDEM!", - "lvl2": null, - "lvl3": "New release v0.7 (Mimas)" - } - }, - { - "content": "Unikraft VSCode Extension", - "id": "//blog/2022-02-05-new-site-and-unikraft-at-fosdem22", - "type": "lvl4", - "url": "/blog/2022-02-05-new-site-and-unikraft-at-fosdem22#unikraft-vscode-extension", - "hierarchy": { - "lvl1": "Kicking off 2022 with a new site and release at FOSDEM!", - "lvl2": "New release v0.7 (Mimas)", - "lvl3": null - } - }, - { - "content": "Unikraft at FOSDEM'22", - "id": "//blog/2022-02-05-new-site-and-unikraft-at-fosdem22", - "type": "lvl3", - "url": "/blog/2022-02-05-new-site-and-unikraft-at-fosdem22#unikraft-at-fosdem22", - "hierarchy": { - "lvl1": "Kicking off 2022 with a new site and release at FOSDEM!", - "lvl2": "Unikraft VSCode Extension", - "lvl3": "Unikraft at FOSDEM'22" - } - }, - { - "content": "Acknowledgements", - "id": "//blog/2022-02-05-new-site-and-unikraft-at-fosdem22", - "type": "lvl3", - "url": "/blog/2022-02-05-new-site-and-unikraft-at-fosdem22#acknowledgements", - "hierarchy": { - "lvl1": "Kicking off 2022 with a new site and release at FOSDEM!", - "lvl2": "Unikraft at FOSDEM'22", - "lvl3": "Acknowledgements" - } - }, - { - "content": "Unikraft and more at ASPLOS’22", - "id": "//blog/2022-02-17-unikraft-at-asplos22", - "type": "lvl1", - "url": "/blog/2022-02-17-unikraft-at-asplos22", - "hierarchy": { "lvl1": "Unikraft and more at ASPLOS’22" } - }, - { - "content": "FlexOS: Towards Flexible OS Isolation", - "id": "//blog/2022-02-17-unikraft-at-asplos22", - "type": "lvl3", - "url": "/blog/2022-02-17-unikraft-at-asplos22#flexos-towards-flexible-os-isolation", - "hierarchy": { - "lvl1": "Unikraft and more at ASPLOS’22", - "lvl2": null, - "lvl3": "FlexOS: Towards Flexible OS Isolation" - } - }, - { - "content": "Unikraft Tutorial", - "id": "//blog/2022-02-17-unikraft-at-asplos22", - "type": "lvl3", - "url": "/blog/2022-02-17-unikraft-at-asplos22#unikraft-tutorial", - "hierarchy": { - "lvl1": "Unikraft and more at ASPLOS’22", - "lvl2": "FlexOS: Towards Flexible OS Isolation", - "lvl3": "Unikraft Tutorial" - } - }, - { - "content": "Unikraft accepted as Google Summer of Code Organization!", - "id": "//blog/2022-03-16-unikraft-gsoc-org", - "type": "lvl1", - "url": "/blog/2022-03-16-unikraft-gsoc-org", - "hierarchy": { - "lvl1": "Unikraft accepted as Google Summer of Code Organization!" - } - }, - { - "content": "Interested in Security for Unikraft?", - "id": "//blog/2022-03-24-unikraft-security", - "type": "lvl1", - "url": "/blog/2022-03-24-unikraft-security", - "hierarchy": { "lvl1": "Interested in Security for Unikraft?" } - }, - { - "content": "Unikraft releases v0.8.0 (Enceladus)", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl1", - "url": "/blog/2022-03-29-unikraft-releases-enceladus", - "hierarchy": { "lvl1": "Unikraft releases v0.8.0 (Enceladus)" } - }, - { - "content": "ARM Pointer Authentication (PAuth) support", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl3", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#arm-pointer-authentication-pauth-support", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": null, - "lvl3": "ARM Pointer Authentication (PAuth) support" - } - }, - { - "content": "GCC Support for PAuth", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl4", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#gcc-support-for-pauth", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "ARM Pointer Authentication (PAuth) support", - "lvl3": null - } - }, - { - "content": "Virtual Memory API", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl3", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#virtual-memory-api", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "GCC Support for PAuth", - "lvl3": "Virtual Memory API" - } - }, - { - "content": "Basic (Un-)Mapping", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl4", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#basic-un-mapping", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "Virtual Memory API", - "lvl3": null - } - }, - { - "content": "Specific Physical Memory Mapping", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl4", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#specific-physical-memory-mapping", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "Basic (Un-)Mapping", - "lvl3": null - } - }, - { - "content": "Page Table Walking", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl4", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#page-table-walking", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "Specific Physical Memory Mapping", - "lvl3": null - } - }, - { - "content": "Support for partial checksumming / checksum offloading", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl3", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#support-for-partial-checksumming--checksum-offloading", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "Page Table Walking", - "lvl3": "Support for partial checksumming / checksum offloading" - } - }, - { - "content": "A new `uk_event` trap interface", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl3", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#a-new-uk_event-trap-interface", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "Support for partial checksumming / checksum offloading", - "lvl3": "A new `uk_event` trap interface" - } - }, - { - "content": "Using Events", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl4", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#using-events", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "A new `uk_event` trap interface", - "lvl3": null - } - }, - { - "content": "Additional interrupt context safe functions", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl3", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#additional-interrupt-context-safe-functions", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "Using Events", - "lvl3": "Additional interrupt context safe functions" - } - }, - { - "content": "Google Summer of Code 2022", - "id": "//blog/2022-03-29-unikraft-releases-enceladus", - "type": "lvl3", - "url": "/blog/2022-03-29-unikraft-releases-enceladus#google-summer-of-code-2022", - "hierarchy": { - "lvl1": "Unikraft releases v0.8.0 (Enceladus)", - "lvl2": "Additional interrupt context safe functions", - "lvl3": "Google Summer of Code 2022" - } - }, - { - "content": "Three Unikraft projects selected at Google Summer of Code 2022", - "id": "//blog/2022-05-21-unikraft-gsoc-org", - "type": "lvl1", - "url": "/blog/2022-05-21-unikraft-gsoc-org", - "hierarchy": { - "lvl1": "Three Unikraft projects selected at Google Summer of Code 2022" - } - }, - { - "content": "Unikraft releases v0.9.0 (Hyperion)", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl1", - "url": "/blog/2022-06-13-unikraft-releases-hyperion", - "hierarchy": { "lvl1": "Unikraft releases v0.9.0 (Hyperion)" } - }, - { - "content": "A new common SMP API", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl3", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#a-new-common-smp-api", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": null, - "lvl3": "A new common SMP API" - } - }, - { - "content": "Implementing the API for a new architecture", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl4", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#implementing-the-api-for-a-new-architecture", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "A new common SMP API", - "lvl3": null - } - }, - { - "content": "`ukstore`: Unikraft Information Storage", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl3", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#ukstore-unikraft-information-storage", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "Implementing the API for a new architecture", - "lvl3": "`ukstore`: Unikraft Information Storage" - } - }, - { - "content": "Usage", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl4", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#usage", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "`ukstore`: Unikraft Information Storage", - "lvl3": null - } - }, - { - "content": "ARM Branch Target Identification (BTI)", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl3", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#arm-branch-target-identification-bti", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "Usage", - "lvl3": "ARM Branch Target Identification (BTI)" - } - }, - { - "content": "Architecture Support", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl4", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#architecture-support", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "ARM Branch Target Identification (BTI)", - "lvl3": null - } - }, - { - "content": "GCC Support", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl4", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#gcc-support", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "Architecture Support", - "lvl3": null - } - }, - { - "content": "Backwards Compatibility", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl4", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#backwards-compatibility", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "GCC Support", - "lvl3": null - } - }, - { - "content": "Changes introduced in this PR", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl4", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#changes-introduced-in-this-pr", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "Backwards Compatibility", - "lvl3": null - } - }, - { - "content": "Platform Requirements", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl4", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#platform-requirements", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "Changes introduced in this PR", - "lvl3": null - } - }, - { - "content": "Community Activities", - "id": "//blog/2022-06-13-unikraft-releases-hyperion", - "type": "lvl3", - "url": "/blog/2022-06-13-unikraft-releases-hyperion#community-activities", - "hierarchy": { - "lvl1": "Unikraft releases v0.9.0 (Hyperion)", - "lvl2": "Platform Requirements", - "lvl3": "Community Activities" - } - }, - { - "content": "Adding SMP support", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl1", - "url": "/blog/2022-06-27-unikraft-synchronization", - "hierarchy": { "lvl1": "Adding SMP support" } - }, - { - "content": "Spinlock", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-06-27-unikraft-synchronization#spinlock", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Spinlock", - "lvl3": null - } - }, - { - "content": "x86 spinlock", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-06-27-unikraft-synchronization#x86-spinlock", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Spinlock", - "lvl3": "x86 spinlock" - } - }, - { - "content": "ARM spinlock", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-06-27-unikraft-synchronization#arm-spinlock", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "x86 spinlock", - "lvl3": "ARM spinlock" - } - }, - { - "content": "Mutex", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-06-27-unikraft-synchronization#mutex", - "hierarchy": { "lvl1": "Adding SMP support", "lvl2": "Mutex", "lvl3": null } - }, - { - "content": "Semaphore", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-06-27-unikraft-synchronization#semaphore", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Semaphore", - "lvl3": null - } - }, - { - "content": "Reader-Writer Locks", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-06-27-unikraft-synchronization#reader-writer-locks", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Reader-Writer Locks", - "lvl3": null - } - }, - { - "content": "Reader Lock", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-06-27-unikraft-synchronization#reader-lock", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Reader-Writer Locks", - "lvl3": "Reader Lock" - } - }, - { - "content": "Writer Lock", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-06-27-unikraft-synchronization#writer-lock", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Reader Lock", - "lvl3": "Writer Lock" - } - }, - { - "content": "Reader Unlock", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-06-27-unikraft-synchronization#reader-unlock", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Writer Lock", - "lvl3": "Reader Unlock" - } - }, - { - "content": "Writer Unlock", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-06-27-unikraft-synchronization#writer-unlock", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Reader Unlock", - "lvl3": "Writer Unlock" - } - }, - { - "content": "Upgrade", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-06-27-unikraft-synchronization#upgrade", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Writer Unlock", - "lvl3": "Upgrade" - } - }, - { - "content": "Downgrade", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-06-27-unikraft-synchronization#downgrade", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Upgrade", - "lvl3": "Downgrade" - } - }, - { - "content": "Testing", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-06-27-unikraft-synchronization#testing", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Testing", - "lvl3": null - } - }, - { - "content": "Future Work", - "id": "//blog/2022-06-27-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-06-27-unikraft-synchronization#future-work", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Future Work", - "lvl3": null - } - }, - { - "content": "Improving security and isolation of Unikraft with Intel SGX", - "id": "//blog/2022-07-05-unikraft-gsoc-intel-sgx", - "type": "lvl1", - "url": "/blog/2022-07-05-unikraft-gsoc-intel-sgx", - "hierarchy": { - "lvl1": "Improving security and isolation of Unikraft with Intel SGX" - } - }, - { - "content": "TEE and Intel SGX", - "id": "//blog/2022-07-05-unikraft-gsoc-intel-sgx", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-intel-sgx#tee-and-intel-sgx", - "hierarchy": { - "lvl1": "Improving security and isolation of Unikraft with Intel SGX", - "lvl2": "TEE and Intel SGX", - "lvl3": null - } - }, - { - "content": "How to?", - "id": "//blog/2022-07-05-unikraft-gsoc-intel-sgx", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-intel-sgx#how-to", - "hierarchy": { - "lvl1": "Improving security and isolation of Unikraft with Intel SGX", - "lvl2": "How to?", - "lvl3": null - } - }, - { - "content": "Progress", - "id": "//blog/2022-07-05-unikraft-gsoc-intel-sgx", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-intel-sgx#progress", - "hierarchy": { - "lvl1": "Improving security and isolation of Unikraft with Intel SGX", - "lvl2": "Progress", - "lvl3": null - } - }, - { - "content": "Next steps", - "id": "//blog/2022-07-05-unikraft-gsoc-intel-sgx", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-intel-sgx#next-steps", - "hierarchy": { - "lvl1": "Improving security and isolation of Unikraft with Intel SGX", - "lvl2": "Next steps", - "lvl3": null - } - }, - { - "content": "Shadow Stack (Part 1)", - "id": "//blog/2022-07-05-unikraft-gsoc-shadow-stack", - "type": "lvl1", - "url": "/blog/2022-07-05-unikraft-gsoc-shadow-stack", - "hierarchy": { "lvl1": "Shadow Stack (Part 1)" } - }, - { - "content": "Objectives", - "id": "//blog/2022-07-05-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-shadow-stack#objectives", - "hierarchy": { - "lvl1": "Shadow Stack (Part 1)", - "lvl2": "Objectives", - "lvl3": null - } - }, - { - "content": "Starting point", - "id": "//blog/2022-07-05-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-shadow-stack#starting-point", - "hierarchy": { - "lvl1": "Shadow Stack (Part 1)", - "lvl2": "Starting point", - "lvl3": null - } - }, - { - "content": "Progress", - "id": "//blog/2022-07-05-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-shadow-stack#progress", - "hierarchy": { - "lvl1": "Shadow Stack (Part 1)", - "lvl2": "Progress", - "lvl3": null - } - }, - { - "content": "Interesting findings", - "id": "//blog/2022-07-05-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-shadow-stack#interesting-findings", - "hierarchy": { - "lvl1": "Shadow Stack (Part 1)", - "lvl2": "Interesting findings", - "lvl3": null - } - }, - { - "content": "Next steps", - "id": "//blog/2022-07-05-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-05-unikraft-gsoc-shadow-stack#next-steps", - "hierarchy": { - "lvl1": "Shadow Stack (Part 1)", - "lvl2": "Next steps", - "lvl3": null - } - }, - { - "content": "Adding SMP support", - "id": "//blog/2022-07-19-unikraft-synchronization", - "type": "lvl1", - "url": "/blog/2022-07-19-unikraft-synchronization", - "hierarchy": { "lvl1": "Adding SMP support" } - }, - { - "content": "Read-Copy-Update (RCU)", - "id": "//blog/2022-07-19-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-07-19-unikraft-synchronization#read-copy-update-rcu", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Read-Copy-Update (RCU)", - "lvl3": null - } - }, - { - "content": "Reference-Counted Search And Delete", - "id": "//blog/2022-07-19-unikraft-synchronization", - "type": "lvl4", - "url": "/blog/2022-07-19-unikraft-synchronization#reference-counted-search-and-delete", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Read-Copy-Update (RCU)", - "lvl3": null - } - }, - { - "content": "Deferred Free", - "id": "//blog/2022-07-19-unikraft-synchronization", - "type": "lvl4", - "url": "/blog/2022-07-19-unikraft-synchronization#deferred-free", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Reference-Counted Search And Delete", - "lvl3": null - } - }, - { - "content": "Lock-Free Linked Lists Using Compare and Swap", - "id": "//blog/2022-07-19-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-07-19-unikraft-synchronization#lock-free-linked-lists-using-compare-and-swap", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Deferred Free", - "lvl3": "Lock-Free Linked Lists Using Compare and Swap" - } - }, - { - "content": "Problems", - "id": "//blog/2022-07-19-unikraft-synchronization", - "type": "lvl3", - "url": "/blog/2022-07-19-unikraft-synchronization#problems", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Lock-Free Linked Lists Using Compare and Swap", - "lvl3": "Problems" - } - }, - { - "content": "Posix-Futex Review", - "id": "//blog/2022-07-19-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-07-19-unikraft-synchronization#posix-futex-review", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Posix-Futex Review", - "lvl3": null - } - }, - { - "content": "Future Work", - "id": "//blog/2022-07-19-unikraft-synchronization", - "type": "lvl2", - "url": "/blog/2022-07-19-unikraft-synchronization#future-work", - "hierarchy": { - "lvl1": "Adding SMP support", - "lvl2": "Future Work", - "lvl3": null - } - }, - { - "content": "Leveraging Intel SGX in Unikraft: Challenges and Recent progress", - "id": "//blog/2022-07-20-unikraft-gsoc-intel-sgx-2", - "type": "lvl1", - "url": "/blog/2022-07-20-unikraft-gsoc-intel-sgx-2", - "hierarchy": { - "lvl1": "Leveraging Intel SGX in Unikraft: Challenges and Recent progress" - } - }, - { - "content": "The Linux way to support Intel SGX", - "id": "//blog/2022-07-20-unikraft-gsoc-intel-sgx-2", - "type": "lvl2", - "url": "/blog/2022-07-20-unikraft-gsoc-intel-sgx-2#the-linux-way-to-support-intel-sgx", - "hierarchy": { - "lvl1": "Leveraging Intel SGX in Unikraft: Challenges and Recent progress", - "lvl2": "The Linux way to support Intel SGX", - "lvl3": null - } - }, - { - "content": "What should be implemented in Unikraft to support Intel SGX", - "id": "//blog/2022-07-20-unikraft-gsoc-intel-sgx-2", - "type": "lvl2", - "url": "/blog/2022-07-20-unikraft-gsoc-intel-sgx-2#what-should-be-implemented-in-unikraft-to-support-intel-sgx", - "hierarchy": { - "lvl1": "Leveraging Intel SGX in Unikraft: Challenges and Recent progress", - "lvl2": "What should be implemented in Unikraft to support Intel SGX", - "lvl3": null - } - }, - { - "content": "Current Progress", - "id": "//blog/2022-07-20-unikraft-gsoc-intel-sgx-2", - "type": "lvl2", - "url": "/blog/2022-07-20-unikraft-gsoc-intel-sgx-2#current-progress", - "hierarchy": { - "lvl1": "Leveraging Intel SGX in Unikraft: Challenges and Recent progress", - "lvl2": "Current Progress", - "lvl3": null - } - }, - { - "content": "Future Work", - "id": "//blog/2022-07-20-unikraft-gsoc-intel-sgx-2", - "type": "lvl2", - "url": "/blog/2022-07-20-unikraft-gsoc-intel-sgx-2#future-work", - "hierarchy": { - "lvl1": "Leveraging Intel SGX in Unikraft: Challenges and Recent progress", - "lvl2": "Future Work", - "lvl3": null - } - }, - { - "content": "Shadow Stack (Part 2)", - "id": "//blog/2022-07-20-unikraft-gsoc-shadow-stack", - "type": "lvl1", - "url": "/blog/2022-07-20-unikraft-gsoc-shadow-stack", - "hierarchy": { "lvl1": "Shadow Stack (Part 2)" } - }, - { - "content": "Progress", - "id": "//blog/2022-07-20-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-20-unikraft-gsoc-shadow-stack#progress", - "hierarchy": { - "lvl1": "Shadow Stack (Part 2)", - "lvl2": "Progress", - "lvl3": null - } - }, - { - "content": "Problems", - "id": "//blog/2022-07-20-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-20-unikraft-gsoc-shadow-stack#problems", - "hierarchy": { - "lvl1": "Shadow Stack (Part 2)", - "lvl2": "Problems", - "lvl3": null - } - }, - { - "content": "Interesting findings", - "id": "//blog/2022-07-20-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-20-unikraft-gsoc-shadow-stack#interesting-findings", - "hierarchy": { - "lvl1": "Shadow Stack (Part 2)", - "lvl2": "Interesting findings", - "lvl3": null - } - }, - { - "content": "Next steps", - "id": "//blog/2022-07-20-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-07-20-unikraft-gsoc-shadow-stack#next-steps", - "hierarchy": { - "lvl1": "Shadow Stack (Part 2)", - "lvl2": "Next steps", - "lvl3": null - } - }, - { - "content": "Shadow Stack (Part 3)", - "id": "//blog/2022-08-19-unikraft-gsoc-shadow-stack", - "type": "lvl1", - "url": "/blog/2022-08-19-unikraft-gsoc-shadow-stack", - "hierarchy": { "lvl1": "Shadow Stack (Part 3)" } - }, - { - "content": "Starting point", - "id": "//blog/2022-08-19-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-08-19-unikraft-gsoc-shadow-stack#starting-point", - "hierarchy": { - "lvl1": "Shadow Stack (Part 3)", - "lvl2": "Starting point", - "lvl3": null - } - }, - { - "content": "Progress", - "id": "//blog/2022-08-19-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-08-19-unikraft-gsoc-shadow-stack#progress", - "hierarchy": { - "lvl1": "Shadow Stack (Part 3)", - "lvl2": "Progress", - "lvl3": null - } - }, - { - "content": "Problems", - "id": "//blog/2022-08-19-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-08-19-unikraft-gsoc-shadow-stack#problems", - "hierarchy": { - "lvl1": "Shadow Stack (Part 3)", - "lvl2": "Problems", - "lvl3": null - } - }, - { - "content": "Interesting findings", - "id": "//blog/2022-08-19-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-08-19-unikraft-gsoc-shadow-stack#interesting-findings", - "hierarchy": { - "lvl1": "Shadow Stack (Part 3)", - "lvl2": "Interesting findings", - "lvl3": null - } - }, - { - "content": "Next steps", - "id": "//blog/2022-08-19-unikraft-gsoc-shadow-stack", - "type": "lvl2", - "url": "/blog/2022-08-19-unikraft-gsoc-shadow-stack#next-steps", - "hierarchy": { - "lvl1": "Shadow Stack (Part 3)", - "lvl2": "Next steps", - "lvl3": null - } - }, - { - "content": "Unikraft releases v0.10.0 (Phoebe)", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl1", - "url": "/blog/2022-08-20-unikraft-releases-phoebe", - "hierarchy": { "lvl1": "Unikraft releases v0.10.0 (Phoebe)" } - }, - { - "content": "A new abstract microlibrary for POSIX sockets", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl3", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#a-new-abstract-microlibrary-for-posix-sockets", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": null, - "lvl3": "A new abstract microlibrary for POSIX sockets" - } - }, - { - "content": "Usage", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl4", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#usage", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "A new abstract microlibrary for POSIX sockets", - "lvl3": null - } - }, - { - "content": "Future work", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl4", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#future-work", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Usage", - "lvl3": null - } - }, - { - "content": "A new VFS eventpoll API and POSIX event syscalls", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl3", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#a-new-vfs-eventpoll-api-and-posix-event-syscalls", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Future work", - "lvl3": "A new VFS eventpoll API and POSIX event syscalls" - } - }, - { - "content": "Future work", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl4", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#future-work-1", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "A new VFS eventpoll API and POSIX event syscalls", - "lvl3": null - } - }, - { - "content": "musl integration", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl3", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#musl-integration", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Future work", - "lvl3": "musl integration" - } - }, - { - "content": "SMP implementation for x86_64", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl3", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#smp-implementation-for-x86_64", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "musl integration", - "lvl3": "SMP implementation for x86_64" - } - }, - { - "content": "Implementation", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl4", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#implementation", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "SMP implementation for x86_64", - "lvl3": null - } - }, - { - "content": "Testing", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl4", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#testing", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Implementation", - "lvl3": null - } - }, - { - "content": "Future Work", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl4", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#future-work", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Testing", - "lvl3": null - } - }, - { - "content": "Paging support on arm64 according to VMSAv8-64", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl3", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#paging-support-on-arm64-according-to-vmsav8-64", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Future Work", - "lvl3": "Paging support on arm64 according to VMSAv8-64" - } - }, - { - "content": "Enhancements to POSIX user syscalls", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl3", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#enhancements-to-posix-user-syscalls", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Paging support on arm64 according to VMSAv8-64", - "lvl3": "Enhancements to POSIX user syscalls" - } - }, - { - "content": "Future Work", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl4", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#future-work-1", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Enhancements to POSIX user syscalls", - "lvl3": null - } - }, - { - "content": "Community Activities", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl3", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#community-activities", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Future Work", - "lvl3": "Community Activities" - } - }, - { - "content": "Unikraft Summer of Code", - "id": "//blog/2022-08-20-unikraft-releases-phoebe", - "type": "lvl4", - "url": "/blog/2022-08-20-unikraft-releases-phoebe#unikraft-summer-of-code", - "hierarchy": { - "lvl1": "Unikraft releases v0.10.0 (Phoebe)", - "lvl2": "Community Activities", - "lvl3": null - } - }, - { - "content": "Adding I/O APIC support", - "id": "//blog/2022-08-21-unikraft-ioapic", - "type": "lvl1", - "url": "/blog/2022-08-21-unikraft-ioapic", - "hierarchy": { "lvl1": "Adding I/O APIC support" } - }, - { - "content": "Design", - "id": "//blog/2022-08-21-unikraft-ioapic", - "type": "lvl2", - "url": "/blog/2022-08-21-unikraft-ioapic#design", - "hierarchy": { - "lvl1": "Adding I/O APIC support", - "lvl2": "Design", - "lvl3": null - } - }, - { - "content": "IOAPIC detection and enable", - "id": "//blog/2022-08-21-unikraft-ioapic", - "type": "lvl2", - "url": "/blog/2022-08-21-unikraft-ioapic#ioapic-detection-and-enable", - "hierarchy": { - "lvl1": "Adding I/O APIC support", - "lvl2": "IOAPIC detection and enable", - "lvl3": null - } - }, - { - "content": "IOAPIC registers", - "id": "//blog/2022-08-21-unikraft-ioapic", - "type": "lvl2", - "url": "/blog/2022-08-21-unikraft-ioapic#ioapic-registers", - "hierarchy": { - "lvl1": "Adding I/O APIC support", - "lvl2": "IOAPIC registers", - "lvl3": null - } - }, - { - "content": "Redirection Table", - "id": "//blog/2022-08-21-unikraft-ioapic", - "type": "lvl2", - "url": "/blog/2022-08-21-unikraft-ioapic#redirection-table", - "hierarchy": { - "lvl1": "Adding I/O APIC support", - "lvl2": "Redirection Table", - "lvl3": null - } - }, - { - "content": "Initialization", - "id": "//blog/2022-08-21-unikraft-ioapic", - "type": "lvl2", - "url": "/blog/2022-08-21-unikraft-ioapic#initialization", - "hierarchy": { - "lvl1": "Adding I/O APIC support", - "lvl2": "Initialization", - "lvl3": null - } - }, - { - "content": "Interrupt Source Override", - "id": "//blog/2022-08-21-unikraft-ioapic", - "type": "lvl2", - "url": "/blog/2022-08-21-unikraft-ioapic#interrupt-source-override", - "hierarchy": { - "lvl1": "Adding I/O APIC support", - "lvl2": "Interrupt Source Override", - "lvl3": null - } - }, - { - "content": "Radix-Tree: Internal data structures for SGX EPC Page Management", - "id": "//blog/2022-08-22-unikraft-gsoc-intel-sgx-3", - "type": "lvl1", - "url": "/blog/2022-08-22-unikraft-gsoc-intel-sgx-3", - "hierarchy": { - "lvl1": "Radix-Tree: Internal data structures for SGX EPC Page Management" - } - }, - { - "content": "What is a radix-tree?", - "id": "//blog/2022-08-22-unikraft-gsoc-intel-sgx-3", - "type": "lvl2", - "url": "/blog/2022-08-22-unikraft-gsoc-intel-sgx-3#what-is-a-radix-tree", - "hierarchy": { - "lvl1": "Radix-Tree: Internal data structures for SGX EPC Page Management", - "lvl2": "What is a radix-tree?", - "lvl3": null - } - }, - { - "content": "Implementation details", - "id": "//blog/2022-08-22-unikraft-gsoc-intel-sgx-3", - "type": "lvl2", - "url": "/blog/2022-08-22-unikraft-gsoc-intel-sgx-3#implementation-details", - "hierarchy": { - "lvl1": "Radix-Tree: Internal data structures for SGX EPC Page Management", - "lvl2": "Implementation details", - "lvl3": null - } - }, - { - "content": "Unikraft Hacktoberfest '22", - "id": "//blog/2022-10-08-unikraft-hacktoberfest", - "type": "lvl1", - "url": "/blog/2022-10-08-unikraft-hacktoberfest", - "hierarchy": { "lvl1": "Unikraft Hacktoberfest '22" } - }, - { - "content": "First Steps", - "id": "//blog/2022-10-08-unikraft-hacktoberfest", - "type": "lvl3", - "url": "/blog/2022-10-08-unikraft-hacktoberfest#first-steps", - "hierarchy": { - "lvl1": "Unikraft Hacktoberfest '22", - "lvl2": null, - "lvl3": "First Steps" - } - }, - { - "content": "Hardwork Always Pays Off", - "id": "//blog/2022-10-08-unikraft-hacktoberfest", - "type": "lvl3", - "url": "/blog/2022-10-08-unikraft-hacktoberfest#hardwork-always-pays-off", - "hierarchy": { - "lvl1": "Unikraft Hacktoberfest '22", - "lvl2": "First Steps", - "lvl3": "Hardwork Always Pays Off" - } - }, - { - "content": "Conclusion", - "id": "//blog/2022-10-08-unikraft-hacktoberfest", - "type": "lvl3", - "url": "/blog/2022-10-08-unikraft-hacktoberfest#conclusion", - "hierarchy": { - "lvl1": "Unikraft Hacktoberfest '22", - "lvl2": "Hardwork Always Pays Off", - "lvl3": "Conclusion" - } - }, - { - "content": "Unikraft Community Meet-up '22", - "id": "//blog/2022-10-14-unikraft-community-meetup", - "type": "lvl1", - "url": "/blog/2022-10-14-unikraft-community-meetup", - "hierarchy": { "lvl1": "Unikraft Community Meet-up '22" } - }, - { - "content": "The First of Many", - "id": "//blog/2022-10-14-unikraft-community-meetup", - "type": "lvl3", - "url": "/blog/2022-10-14-unikraft-community-meetup#the-first-of-many", - "hierarchy": { - "lvl1": "Unikraft Community Meet-up '22", - "lvl2": null, - "lvl3": "The First of Many" - } - }, - { - "content": "A Hike, a Grill and a Presentation Walk into a Bar", - "id": "//blog/2022-10-14-unikraft-community-meetup", - "type": "lvl3", - "url": "/blog/2022-10-14-unikraft-community-meetup#a-hike-a-grill-and-a-presentation-walk-into-a-bar", - "hierarchy": { - "lvl1": "Unikraft Community Meet-up '22", - "lvl2": "The First of Many", - "lvl3": "A Hike, a Grill and a Presentation Walk into a Bar" - } - }, - { - "content": "Is There Such a Thing as a Meet-up Without a Grill?", - "id": "//blog/2022-10-14-unikraft-community-meetup", - "type": "lvl3", - "url": "/blog/2022-10-14-unikraft-community-meetup#is-there-such-a-thing-as-a-meet-up-without-a-grill", - "hierarchy": { - "lvl1": "Unikraft Community Meet-up '22", - "lvl2": "A Hike, a Grill and a Presentation Walk into a Bar", - "lvl3": "Is There Such a Thing as a Meet-up Without a Grill?" - } - }, - { - "content": "To Many More to Come", - "id": "//blog/2022-10-14-unikraft-community-meetup", - "type": "lvl3", - "url": "/blog/2022-10-14-unikraft-community-meetup#to-many-more-to-come", - "hierarchy": { - "lvl1": "Unikraft Community Meet-up '22", - "lvl2": "Is There Such a Thing as a Meet-up Without a Grill?", - "lvl3": "To Many More to Come" - } - }, - { - "content": "Unikraft Reaches 1K+ GitHub Stars! (and 500 Discord Users)", - "id": "//blog/2022-10-14-unikraft-reaches-1k-github-stars", - "type": "lvl1", - "url": "/blog/2022-10-14-unikraft-reaches-1k-github-stars", - "hierarchy": { - "lvl1": "Unikraft Reaches 1K+ GitHub Stars! (and 500 Discord Users)" - } - }, - { - "content": "Winding Back the Clock", - "id": "//blog/2022-10-14-unikraft-reaches-1k-github-stars", - "type": "lvl3", - "url": "/blog/2022-10-14-unikraft-reaches-1k-github-stars#winding-back-the-clock", - "hierarchy": { - "lvl1": "Unikraft Reaches 1K+ GitHub Stars! (and 500 Discord Users)", - "lvl2": null, - "lvl3": "Winding Back the Clock" - } - }, - { - "content": "The Unikraft Principles", - "id": "//blog/2022-10-14-unikraft-reaches-1k-github-stars", - "type": "lvl3", - "url": "/blog/2022-10-14-unikraft-reaches-1k-github-stars#the-unikraft-principles", - "hierarchy": { - "lvl1": "Unikraft Reaches 1K+ GitHub Stars! (and 500 Discord Users)", - "lvl2": "Winding Back the Clock", - "lvl3": "The Unikraft Principles" - } - }, - { - "content": "What's Ahead", - "id": "//blog/2022-10-14-unikraft-reaches-1k-github-stars", - "type": "lvl3", - "url": "/blog/2022-10-14-unikraft-reaches-1k-github-stars#whats-ahead", - "hierarchy": { - "lvl1": "Unikraft Reaches 1K+ GitHub Stars! (and 500 Discord Users)", - "lvl2": "The Unikraft Principles", - "lvl3": "What's Ahead" - } - }, - { - "content": "Unikraft vs. UKL: What's the Difference?", - "id": "//blog/2022-10-19-ukl-vs-unikraft", - "type": "lvl1", - "url": "/blog/2022-10-19-ukl-vs-unikraft", - "hierarchy": { "lvl1": "Unikraft vs. UKL: What's the Difference?" } - }, - { - "content": "Unikraft Munich Hackathon '22", - "id": "//blog/2022-10-25-unikraft-munich-2022", - "type": "lvl1", - "url": "/blog/2022-10-25-unikraft-munich-2022", - "hierarchy": { "lvl1": "Unikraft Munich Hackathon '22" } - }, - { - "content": "Grüß Gott, München!", - "id": "//blog/2022-10-25-unikraft-munich-2022", - "type": "lvl3", - "url": "/blog/2022-10-25-unikraft-munich-2022#gruss-gott-munchen", - "hierarchy": { - "lvl1": "Unikraft Munich Hackathon '22", - "lvl2": null, - "lvl3": "Grüß Gott, München!" - } - }, - { - "content": "Make Open Source Contributions Great Again!", - "id": "//blog/2022-10-25-unikraft-munich-2022", - "type": "lvl3", - "url": "/blog/2022-10-25-unikraft-munich-2022#make-open-source-contributions-great-again", - "hierarchy": { - "lvl1": "Unikraft Munich Hackathon '22", - "lvl2": "Grüß Gott, München!", - "lvl3": "Make Open Source Contributions Great Again!" - } - }, - { - "content": "Special Thanks", - "id": "//blog/2022-10-25-unikraft-munich-2022", - "type": "lvl3", - "url": "/blog/2022-10-25-unikraft-munich-2022#special-thanks", - "hierarchy": { - "lvl1": "Unikraft Munich Hackathon '22", - "lvl2": "Make Open Source Contributions Great Again!", - "lvl3": "Special Thanks" - } - }, - { - "content": "Building the Future of Security and Isolation with Unikraft on Morello!", - "id": "//blog/2022-12-01-unikraft-on-morello", - "type": "lvl1", - "url": "/blog/2022-12-01-unikraft-on-morello", - "hierarchy": { - "lvl1": "Building the Future of Security and Isolation with Unikraft on Morello!" - } - }, - { - "content": "But What **Is** Morello? And What's So Great About It Anyway?", - "id": "//blog/2022-12-01-unikraft-on-morello", - "type": "lvl3", - "url": "/blog/2022-12-01-unikraft-on-morello#but-what-is-morello-and-whats-so-great-about-it-anyway", - "hierarchy": { - "lvl1": "Building the Future of Security and Isolation with Unikraft on Morello!", - "lvl2": null, - "lvl3": "But What **Is** Morello? And What's So Great About It Anyway?" - } - }, - { - "content": "How Do We Run Software on Morello?", - "id": "//blog/2022-12-01-unikraft-on-morello", - "type": "lvl3", - "url": "/blog/2022-12-01-unikraft-on-morello#how-do-we-run-software-on-morello", - "hierarchy": { - "lvl1": "Building the Future of Security and Isolation with Unikraft on Morello!", - "lvl2": "But What **Is** Morello? And What's So Great About It Anyway?", - "lvl3": "How Do We Run Software on Morello?" - } - }, - { - "content": "Porting Unikraft to Morello", - "id": "//blog/2022-12-01-unikraft-on-morello", - "type": "lvl3", - "url": "/blog/2022-12-01-unikraft-on-morello#porting-unikraft-to-morello", - "hierarchy": { - "lvl1": "Building the Future of Security and Isolation with Unikraft on Morello!", - "lvl2": "How Do We Run Software on Morello?", - "lvl3": "Porting Unikraft to Morello" - } - }, - { - "content": "What's Next?", - "id": "//blog/2022-12-01-unikraft-on-morello", - "type": "lvl2", - "url": "/blog/2022-12-01-unikraft-on-morello#whats-next", - "hierarchy": { - "lvl1": "Building the Future of Security and Isolation with Unikraft on Morello!", - "lvl2": "What's Next?", - "lvl3": null - } - }, - { - "content": "Unikraft releases v0.11.0 (Janus)", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl1", - "url": "/blog/2022-12-02-unikraft-releases-janus", - "hierarchy": { "lvl1": "Unikraft releases v0.11.0 (Janus)" } - }, - { - "content": "New Scheduling API", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl2", - "url": "/blog/2022-12-02-unikraft-releases-janus#new-scheduling-api", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "New Scheduling API", - "lvl3": null - } - }, - { - "content": "Musl support, POSIX-process, and the `clone` system call", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl2", - "url": "/blog/2022-12-02-unikraft-releases-janus#musl-support-posix-process-and-the-clone-system-call", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "Musl support, POSIX-process, and the `clone` system call", - "lvl3": null - } - }, - { - "content": "libc Tests", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl2", - "url": "/blog/2022-12-02-unikraft-releases-janus#libc-tests", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "libc Tests", - "lvl3": null - } - }, - { - "content": "KraftKit -- Our New CLI Companion Tool", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl2", - "url": "/blog/2022-12-02-unikraft-releases-janus#kraftkit----our-new-cli-companion-tool", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "KraftKit -- Our New CLI Companion Tool", - "lvl3": null - } - }, - { - "content": "Getting Started", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl3", - "url": "/blog/2022-12-02-unikraft-releases-janus#getting-started", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "KraftKit -- Our New CLI Companion Tool", - "lvl3": "Getting Started" - } - }, - { - "content": "On Rewriting It in Go", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl3", - "url": "/blog/2022-12-02-unikraft-releases-janus#on-rewriting-it-in-go", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "Getting Started", - "lvl3": "On Rewriting It in Go" - } - }, - { - "content": "Future Plans", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl3", - "url": "/blog/2022-12-02-unikraft-releases-janus#future-plans", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "On Rewriting It in Go", - "lvl3": "Future Plans" - } - }, - { - "content": "Memory Tagging Extension (MTE)", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl2", - "url": "/blog/2022-12-02-unikraft-releases-janus#memory-tagging-extension-mte", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "Memory Tagging Extension (MTE)", - "lvl3": null - } - }, - { - "content": "Community Activities", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl2", - "url": "/blog/2022-12-02-unikraft-releases-janus#community-activities", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "Community Activities", - "lvl3": null - } - }, - { - "content": "Reaching 1k+ Stars and 500 Discord Members!", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl3", - "url": "/blog/2022-12-02-unikraft-releases-janus#reaching-1k-stars-and-500-discord-members", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "Community Activities", - "lvl3": "Reaching 1k+ Stars and 500 Discord Members!" - } - }, - { - "content": "Unikraft Community Meetup", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl3", - "url": "/blog/2022-12-02-unikraft-releases-janus#unikraft-community-meetup", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "Reaching 1k+ Stars and 500 Discord Members!", - "lvl3": "Unikraft Community Meetup" - } - }, - { - "content": "Hacktoberfest", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl3", - "url": "/blog/2022-12-02-unikraft-releases-janus#hacktoberfest", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "Unikraft Community Meetup", - "lvl3": "Hacktoberfest" - } - }, - { - "content": "Munich Hackathon", - "id": "//blog/2022-12-02-unikraft-releases-janus", - "type": "lvl3", - "url": "/blog/2022-12-02-unikraft-releases-janus#munich-hackathon", - "hierarchy": { - "lvl1": "Unikraft releases v0.11.0 (Janus)", - "lvl2": "Hacktoberfest", - "lvl3": "Munich Hackathon" - } - }, - { - "content": "Unikraft releases v0.12.0 (Epimetheus)", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl1", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus", - "hierarchy": { "lvl1": "Unikraft releases v0.12.0 (Epimetheus)" } - }, - { - "content": "POSIX-compatible Virtual Address Space management (`ukvmem`)", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl2", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#posix-compatible-virtual-address-space-management-ukvmem", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "POSIX-compatible Virtual Address Space management (`ukvmem`)", - "lvl3": null - } - }, - { - "content": "API Usage Examples", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#api-usage-examples", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "POSIX-compatible Virtual Address Space management (`ukvmem`)", - "lvl3": "API Usage Examples" - } - }, - { - "content": "Changes to the Paging API", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#changes-to-the-paging-api", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "API Usage Examples", - "lvl3": "Changes to the Paging API" - } - }, - { - "content": "Fault safe memory accesses (`uknofault`)", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl2", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#fault-safe-memory-accesses-uknofault", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Fault safe memory accesses (`uknofault`)", - "lvl3": null - } - }, - { - "content": "API Usage Examples", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#api-usage-examples-1", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Fault safe memory accesses (`uknofault`)", - "lvl3": "API Usage Examples" - } - }, - { - "content": "Binary compatibility support application (`elfloader`)", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl2", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#binary-compatibility-support-application-elfloader", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Binary compatibility support application (`elfloader`)", - "lvl3": null - } - }, - { - "content": "`strace`-like syscall debug printing", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl2", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#strace-like-syscall-debug-printing", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "`strace`-like syscall debug printing", - "lvl3": null - } - }, - { - "content": "Boot code refactoring", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl2", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#boot-code-refactoring", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Boot code refactoring", - "lvl3": null - } - }, - { - "content": "Memory regions", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#memory-regions", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Boot code refactoring", - "lvl3": "Memory regions" - } - }, - { - "content": "MAP/UNMAP flags (paging only)", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#mapunmap-flags-paging-only", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Memory regions", - "lvl3": "MAP/UNMAP flags (paging only)" - } - }, - { - "content": "mkbootinfo.py", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#mkbootinfopy", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "MAP/UNMAP flags (paging only)", - "lvl3": "mkbootinfo.py" - } - }, - { - "content": "Plat Re-arch", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#plat-re-arch", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "mkbootinfo.py", - "lvl3": "Plat Re-arch" - } - }, - { - "content": "Documentation Updates", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl2", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#documentation-updates", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Documentation Updates", - "lvl3": null - } - }, - { - "content": "Community Activities", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl2", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#community-activities", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Community Activities", - "lvl3": null - } - }, - { - "content": "1200 stars and counting!", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#1200-stars-and-counting", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Community Activities", - "lvl3": "1200 stars and counting!" - } - }, - { - "content": "Full day hackathon at UPB in January", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#full-day-hackathon-at-upb-in-january", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "1200 stars and counting!", - "lvl3": "Full day hackathon at UPB in January" - } - }, - { - "content": "Unikraft Athens Hackathon in March", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#unikraft-athens-hackathon-in-march", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Full day hackathon at UPB in January", - "lvl3": "Unikraft Athens Hackathon in March" - } - }, - { - "content": "Unikraft at FOSDEM'23", - "id": "//blog/2023-02-07-unikraft-releases-epimetheus", - "type": "lvl3", - "url": "/blog/2023-02-07-unikraft-releases-epimetheus#unikraft-at-fosdem23", - "hierarchy": { - "lvl1": "Unikraft releases v0.12.0 (Epimetheus)", - "lvl2": "Unikraft Athens Hackathon in March", - "lvl3": "Unikraft at FOSDEM'23" - } - }, - { - "content": "Unikraft releases v0.13.0 (Atlas)", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl1", - "url": "/blog/2023-05-15-unikraft-releases-atlas", - "hierarchy": { "lvl1": "Unikraft releases v0.13.0 (Atlas)" } - }, - { - "content": "New Synchronization Primitives ([#476](https://github.com/unikraft/unikraft/pull/476))", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#new-synchronization-primitives-#476httpsgithubcomunikraftunikraftpull476", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "New Synchronization Primitives ([#476](https://github.com/unikraft/unikraft/pull/476))", - "lvl3": null - } - }, - { - "content": "Native Firecracker VMM Support ([#760](https://github.com/unikraft/unikraft/pull/760))", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#native-firecracker-vmm-support-#760httpsgithubcomunikraftunikraftpull760", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Native Firecracker VMM Support ([#760](https://github.com/unikraft/unikraft/pull/760))", - "lvl3": null - } - }, - { - "content": "`posix-environ`: Handling Environmental Variables ([#868](https://github.com/unikraft/unikraft/pull/868))", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#posix-environ-handling-environmental-variables-#868httpsgithubcomunikraftunikraftpull868", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "`posix-environ`: Handling Environmental Variables ([#868](https://github.com/unikraft/unikraft/pull/868))", - "lvl3": null - } - }, - { - "content": "Rewriting `uklibparam` ([#867](https://github.com/unikraft/unikraft/pull/867))", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#rewriting-uklibparam-#867httpsgithubcomunikraftunikraftpull867", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Rewriting `uklibparam` ([#867](https://github.com/unikraft/unikraft/pull/867))", - "lvl3": null - } - }, - { - "content": "`app-elfloader` Updates", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#app-elfloader-updates", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "`app-elfloader` Updates", - "lvl3": null - } - }, - { - "content": "Application Compatibility Updates", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#application-compatibility-updates", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Application Compatibility Updates", - "lvl3": null - } - }, - { - "content": "Newlib Support in the Latest Unikraft Version", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#newlib-support-in-the-latest-unikraft-version", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Newlib Support in the Latest Unikraft Version", - "lvl3": null - } - }, - { - "content": "Documentation Updates", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#documentation-updates", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Documentation Updates", - "lvl3": null - } - }, - { - "content": "Community Activities", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl2", - "url": "/blog/2023-05-15-unikraft-releases-atlas#community-activities", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Community Activities", - "lvl3": null - } - }, - { - "content": "Full Day Hackathon at UPB in March", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl3", - "url": "/blog/2023-05-15-unikraft-releases-atlas#full-day-hackathon-at-upb-in-march", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Community Activities", - "lvl3": "Full Day Hackathon at UPB in March" - } - }, - { - "content": "Athens Hackathon", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl3", - "url": "/blog/2023-05-15-unikraft-releases-atlas#athens-hackathon", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Full Day Hackathon at UPB in March", - "lvl3": "Athens Hackathon" - } - }, - { - "content": "Amsterdam Hackathon", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl3", - "url": "/blog/2023-05-15-unikraft-releases-atlas#amsterdam-hackathon", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Athens Hackathon", - "lvl3": "Amsterdam Hackathon" - } - }, - { - "content": "Porto Hackathon", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl3", - "url": "/blog/2023-05-15-unikraft-releases-atlas#porto-hackathon", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Amsterdam Hackathon", - "lvl3": "Porto Hackathon" - } - }, - { - "content": "Google Summer of Code 2023", - "id": "//blog/2023-05-15-unikraft-releases-atlas", - "type": "lvl3", - "url": "/blog/2023-05-15-unikraft-releases-atlas#google-summer-of-code-2023", - "hierarchy": { - "lvl1": "Unikraft releases v0.13.0 (Atlas)", - "lvl2": "Porto Hackathon", - "lvl3": "Google Summer of Code 2023" - } - }, - { - "content": "Tales of Open Source: vfscore", - "id": "//blog/2023-06-09-tales-of-open-source-vfscore", - "type": "lvl1", - "url": "/blog/2023-06-09-tales-of-open-source-vfscore", - "hierarchy": { "lvl1": "Tales of Open Source: vfscore" } - }, - { - "content": "Finding the Source of `vfscore`", - "id": "//blog/2023-06-09-tales-of-open-source-vfscore", - "type": "lvl2", - "url": "/blog/2023-06-09-tales-of-open-source-vfscore#finding-the-source-of-vfscore", - "hierarchy": { - "lvl1": "Tales of Open Source: vfscore", - "lvl2": "Finding the Source of `vfscore`", - "lvl3": null - } - }, - { - "content": "Digging Deeper: OSv", - "id": "//blog/2023-06-09-tales-of-open-source-vfscore", - "type": "lvl2", - "url": "/blog/2023-06-09-tales-of-open-source-vfscore#digging-deeper-osv", - "hierarchy": { - "lvl1": "Tales of Open Source: vfscore", - "lvl2": "Digging Deeper: OSv", - "lvl3": null - } - }, - { - "content": "The Source Material: Prex", - "id": "//blog/2023-06-09-tales-of-open-source-vfscore", - "type": "lvl2", - "url": "/blog/2023-06-09-tales-of-open-source-vfscore#the-source-material-prex", - "hierarchy": { - "lvl1": "Tales of Open Source: vfscore", - "lvl2": "The Source Material: Prex", - "lvl3": null - } - }, - { - "content": "Full Story", - "id": "//blog/2023-06-09-tales-of-open-source-vfscore", - "type": "lvl2", - "url": "/blog/2023-06-09-tales-of-open-source-vfscore#full-story", - "hierarchy": { - "lvl1": "Tales of Open Source: vfscore", - "lvl2": "Full Story", - "lvl3": null - } - }, - { - "content": "re:Arch Unikraft", - "id": "//blog/2023-06-22-unikraft-gsoc-plat-rearch", - "type": "lvl1", - "url": "/blog/2023-06-22-unikraft-gsoc-plat-rearch", - "hierarchy": { "lvl1": "re:Arch Unikraft" } - }, - { - "content": "About Me", - "id": "//blog/2023-06-22-unikraft-gsoc-plat-rearch", - "type": "lvl2", - "url": "/blog/2023-06-22-unikraft-gsoc-plat-rearch#about-me", - "hierarchy": { - "lvl1": "re:Arch Unikraft", - "lvl2": "About Me", - "lvl3": null - } - }, - { - "content": "GSoC'23: re:Arch Unikraft", - "id": "//blog/2023-06-22-unikraft-gsoc-plat-rearch", - "type": "lvl2", - "url": "/blog/2023-06-22-unikraft-gsoc-plat-rearch#gsoc23-rearch-unikraft", - "hierarchy": { - "lvl1": "re:Arch Unikraft", - "lvl2": "GSoC'23: re:Arch Unikraft", - "lvl3": null - } - }, - { - "content": "Motivation", - "id": "//blog/2023-06-22-unikraft-gsoc-plat-rearch", - "type": "lvl3", - "url": "/blog/2023-06-22-unikraft-gsoc-plat-rearch#motivation", - "hierarchy": { - "lvl1": "re:Arch Unikraft", - "lvl2": "GSoC'23: re:Arch Unikraft", - "lvl3": "Motivation" - } - }, - { - "content": "Summary of Objectives", - "id": "//blog/2023-06-22-unikraft-gsoc-plat-rearch", - "type": "lvl3", - "url": "/blog/2023-06-22-unikraft-gsoc-plat-rearch#summary-of-objectives", - "hierarchy": { - "lvl1": "re:Arch Unikraft", - "lvl2": "Motivation", - "lvl3": "Summary of Objectives" - } - }, - { - "content": "Progress", - "id": "//blog/2023-06-22-unikraft-gsoc-plat-rearch", - "type": "lvl3", - "url": "/blog/2023-06-22-unikraft-gsoc-plat-rearch#progress", - "hierarchy": { - "lvl1": "re:Arch Unikraft", - "lvl2": "Summary of Objectives", - "lvl3": "Progress" - } - }, - { - "content": "Next Steps", - "id": "//blog/2023-06-22-unikraft-gsoc-plat-rearch", - "type": "lvl3", - "url": "/blog/2023-06-22-unikraft-gsoc-plat-rearch#next-steps", - "hierarchy": { - "lvl1": "re:Arch Unikraft", - "lvl2": "Progress", - "lvl3": "Next Steps" - } - }, - { - "content": "Expanding Binary Compatibility Mode (Part 1)", - "id": "//blog/2023-06-23-unikraft-gsoc-app-compat-1", - "type": "lvl1", - "url": "/blog/2023-06-23-unikraft-gsoc-app-compat-1", - "hierarchy": { "lvl1": "Expanding Binary Compatibility Mode (Part 1)" } - }, - { - "content": "Motivation", - "id": "//blog/2023-06-23-unikraft-gsoc-app-compat-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-app-compat-1#motivation", - "hierarchy": { - "lvl1": "Expanding Binary Compatibility Mode (Part 1)", - "lvl2": "Motivation", - "lvl3": null - } - }, - { - "content": "Summary of Objectives", - "id": "//blog/2023-06-23-unikraft-gsoc-app-compat-1", - "type": "lvl3", - "url": "/blog/2023-06-23-unikraft-gsoc-app-compat-1#summary-of-objectives", - "hierarchy": { - "lvl1": "Expanding Binary Compatibility Mode (Part 1)", - "lvl2": "Motivation", - "lvl3": "Summary of Objectives" - } - }, - { - "content": "Current Progress", - "id": "//blog/2023-06-23-unikraft-gsoc-app-compat-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-app-compat-1#current-progress", - "hierarchy": { - "lvl1": "Expanding Binary Compatibility Mode (Part 1)", - "lvl2": "Current Progress", - "lvl3": null - } - }, - { - "content": "Next Steps", - "id": "//blog/2023-06-23-unikraft-gsoc-app-compat-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-app-compat-1#next-steps", - "hierarchy": { - "lvl1": "Expanding Binary Compatibility Mode (Part 1)", - "lvl2": "Next Steps", - "lvl3": null - } - }, - { - "content": "About Me", - "id": "//blog/2023-06-23-unikraft-gsoc-app-compat-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-app-compat-1#about-me", - "hierarchy": { - "lvl1": "Expanding Binary Compatibility Mode (Part 1)", - "lvl2": "About Me", - "lvl3": null - } - }, - { - "content": "GSoC'23: Arm CCA Support for Unikraft (Part 1)", - "id": "//blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "type": "lvl1", - "url": "/blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "hierarchy": { "lvl1": "GSoC'23: Arm CCA Support for Unikraft (Part 1)" } - }, - { - "content": "About Me", - "id": "//blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-arm-cca-1#about-me", - "hierarchy": { - "lvl1": "GSoC'23: Arm CCA Support for Unikraft (Part 1)", - "lvl2": "About Me", - "lvl3": null - } - }, - { - "content": "Project Overview", - "id": "//blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-arm-cca-1#project-overview", - "hierarchy": { - "lvl1": "GSoC'23: Arm CCA Support for Unikraft (Part 1)", - "lvl2": "Project Overview", - "lvl3": null - } - }, - { - "content": "Arm CCA", - "id": "//blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "type": "lvl3", - "url": "/blog/2023-06-23-unikraft-gsoc-arm-cca-1#arm-cca", - "hierarchy": { - "lvl1": "GSoC'23: Arm CCA Support for Unikraft (Part 1)", - "lvl2": "Project Overview", - "lvl3": "Arm CCA" - } - }, - { - "content": "Objectives", - "id": "//blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "type": "lvl3", - "url": "/blog/2023-06-23-unikraft-gsoc-arm-cca-1#objectives", - "hierarchy": { - "lvl1": "GSoC'23: Arm CCA Support for Unikraft (Part 1)", - "lvl2": "Arm CCA", - "lvl3": "Objectives" - } - }, - { - "content": "Current Progress", - "id": "//blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-arm-cca-1#current-progress", - "hierarchy": { - "lvl1": "GSoC'23: Arm CCA Support for Unikraft (Part 1)", - "lvl2": "Current Progress", - "lvl3": null - } - }, - { - "content": "Next steps", - "id": "//blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-arm-cca-1#next-steps", - "hierarchy": { - "lvl1": "GSoC'23: Arm CCA Support for Unikraft (Part 1)", - "lvl2": "Next steps", - "lvl3": null - } - }, - { - "content": "Acknowledgement", - "id": "//blog/2023-06-23-unikraft-gsoc-arm-cca-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-arm-cca-1#acknowledgement", - "hierarchy": { - "lvl1": "GSoC'23: Arm CCA Support for Unikraft (Part 1)", - "lvl2": "Acknowledgement", - "lvl3": null - } - }, - { - "content": "GSoC'23: Enhancing VS Code Developer Experience", - "id": "//blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience", - "type": "lvl1", - "url": "/blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience", - "hierarchy": { "lvl1": "GSoC'23: Enhancing VS Code Developer Experience" } - }, - { - "content": "Motivation", - "id": "//blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience#motivation", - "hierarchy": { - "lvl1": "GSoC'23: Enhancing VS Code Developer Experience", - "lvl2": "Motivation", - "lvl3": null - } - }, - { - "content": "Summary of Objectives", - "id": "//blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience", - "type": "lvl3", - "url": "/blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience#summary-of-objectives", - "hierarchy": { - "lvl1": "GSoC'23: Enhancing VS Code Developer Experience", - "lvl2": "Motivation", - "lvl3": "Summary of Objectives" - } - }, - { - "content": "Current Progress", - "id": "//blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience#current-progress", - "hierarchy": { - "lvl1": "GSoC'23: Enhancing VS Code Developer Experience", - "lvl2": "Current Progress", - "lvl3": null - } - }, - { - "content": "Next Steps", - "id": "//blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience#next-steps", - "hierarchy": { - "lvl1": "GSoC'23: Enhancing VS Code Developer Experience", - "lvl2": "Next Steps", - "lvl3": null - } - }, - { - "content": "About Me", - "id": "//blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-enhancing-vscode-developer-experience#about-me", - "hierarchy": { - "lvl1": "GSoC'23: Enhancing VS Code Developer Experience", - "lvl2": "About Me", - "lvl3": null - } - }, - { - "content": "Packaging Pre-built Micro-libraries for Faster and More Secure Builds", - "id": "//blog/2023-06-23-unikraft-gsoc-packaging-libs-1", - "type": "lvl1", - "url": "/blog/2023-06-23-unikraft-gsoc-packaging-libs-1", - "hierarchy": { - "lvl1": "Packaging Pre-built Micro-libraries for Faster and More Secure Builds" - } - }, - { - "content": "About Me", - "id": "//blog/2023-06-23-unikraft-gsoc-packaging-libs-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-packaging-libs-1#about-me", - "hierarchy": { - "lvl1": "Packaging Pre-built Micro-libraries for Faster and More Secure Builds", - "lvl2": "About Me", - "lvl3": null - } - }, - { - "content": "Motivation", - "id": "//blog/2023-06-23-unikraft-gsoc-packaging-libs-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-packaging-libs-1#motivation", - "hierarchy": { - "lvl1": "Packaging Pre-built Micro-libraries for Faster and More Secure Builds", - "lvl2": "Motivation", - "lvl3": null - } - }, - { - "content": "Summary of Objectives", - "id": "//blog/2023-06-23-unikraft-gsoc-packaging-libs-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-packaging-libs-1#summary-of-objectives", - "hierarchy": { - "lvl1": "Packaging Pre-built Micro-libraries for Faster and More Secure Builds", - "lvl2": "Summary of Objectives", - "lvl3": null - } - }, - { - "content": "Progress", - "id": "//blog/2023-06-23-unikraft-gsoc-packaging-libs-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-packaging-libs-1#progress", - "hierarchy": { - "lvl1": "Packaging Pre-built Micro-libraries for Faster and More Secure Builds", - "lvl2": "Progress", - "lvl3": null - } - }, - { - "content": "Problems", - "id": "//blog/2023-06-23-unikraft-gsoc-packaging-libs-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-packaging-libs-1#problems", - "hierarchy": { - "lvl1": "Packaging Pre-built Micro-libraries for Faster and More Secure Builds", - "lvl2": "Problems", - "lvl3": null - } - }, - { - "content": "Next Steps", - "id": "//blog/2023-06-23-unikraft-gsoc-packaging-libs-1", - "type": "lvl2", - "url": "/blog/2023-06-23-unikraft-gsoc-packaging-libs-1#next-steps", - "hierarchy": { - "lvl1": "Packaging Pre-built Micro-libraries for Faster and More Secure Builds", - "lvl2": "Next Steps", - "lvl3": null - } - }, - { - "content": "Five Unikraft Projects Selected at Google Summer of Code 2023", - "id": "//blog/2023-07-10-unikraft-gsoc23", - "type": "lvl1", - "url": "/blog/2023-07-10-unikraft-gsoc23", - "hierarchy": { - "lvl1": "Five Unikraft Projects Selected at Google Summer of Code 2023" - } - }, - { - "content": "Unikraft releases v0.14.0 (Prometheus)", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl1", - "url": "/blog/2023-08-18-unikraft-releases-prometheus", - "hierarchy": { "lvl1": "Unikraft releases v0.14.0 (Prometheus)" } - }, - { - "content": "Native macOS (Darwin) Support ([#1034](https://github.com/unikraft/unikraft/pull/1034))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#native-macos-darwin-support-#1034httpsgithubcomunikraftunikraftpull1034", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": null, - "lvl3": "Native macOS (Darwin) Support ([#1034](https://github.com/unikraft/unikraft/pull/1034))" - } - }, - { - "content": "UEFI Support on `x86_64` and `AArch64` ([#910](https://github.com/unikraft/unikraft/pull/910), [#909](https://github.com/unikraft/unikraft/pull/909))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#uefi-support-on-x86_64-and-aarch64-#910httpsgithubcomunikraftunikraftpull910-#909httpsgithubcomunikraftunikraftpull909", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Native macOS (Darwin) Support ([#1034](https://github.com/unikraft/unikraft/pull/1034))", - "lvl3": "UEFI Support on `x86_64` and `AArch64` ([#910](https://github.com/unikraft/unikraft/pull/910), [#909](https://github.com/unikraft/unikraft/pull/909))" - } - }, - { - "content": "Linux Boot Protocol on `arm64` ([#988](https://github.com/unikraft/unikraft/pull/988))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#linux-boot-protocol-on-arm64-#988httpsgithubcomunikraftunikraftpull988", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "UEFI Support on `x86_64` and `AArch64` ([#910](https://github.com/unikraft/unikraft/pull/910), [#909](https://github.com/unikraft/unikraft/pull/909))", - "lvl3": "Linux Boot Protocol on `arm64` ([#988](https://github.com/unikraft/unikraft/pull/988))" - } - }, - { - "content": "Firecracker Support on `arm64` ([#989](https://github.com/unikraft/unikraft/pull/989))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#firecracker-support-on-arm64-#989httpsgithubcomunikraftunikraftpull989", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Linux Boot Protocol on `arm64` ([#988](https://github.com/unikraft/unikraft/pull/988))", - "lvl3": "Firecracker Support on `arm64` ([#989](https://github.com/unikraft/unikraft/pull/989))" - } - }, - { - "content": "Dynamic `uk_store` API ([#939](https://github.com/unikraft/unikraft/pull/939))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#dynamic-uk_store-api-#939httpsgithubcomunikraftunikraftpull939", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Firecracker Support on `arm64` ([#989](https://github.com/unikraft/unikraft/pull/989))", - "lvl3": "Dynamic `uk_store` API ([#939](https://github.com/unikraft/unikraft/pull/939))" - } - }, - { - "content": "SUBBUILD Build System Feature ([#938](https://github.com/unikraft/unikraft/pull/938))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#subbuild-build-system-feature-#938httpsgithubcomunikraftunikraftpull938", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Dynamic `uk_store` API ([#939](https://github.com/unikraft/unikraft/pull/939))", - "lvl3": "SUBBUILD Build System Feature ([#938](https://github.com/unikraft/unikraft/pull/938))" - } - }, - { - "content": "TREE BUILD Build System Feature ([#1001](https://github.com/unikraft/unikraft/pull/1001))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#tree-build-build-system-feature-#1001httpsgithubcomunikraftunikraftpull1001", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "SUBBUILD Build System Feature ([#938](https://github.com/unikraft/unikraft/pull/938))", - "lvl3": "TREE BUILD Build System Feature ([#1001](https://github.com/unikraft/unikraft/pull/1001))" - } - }, - { - "content": "`uklibid`: Library Identifiers ([#938](https://github.com/unikraft/unikraft/pull/938))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#uklibid-library-identifiers-#938httpsgithubcomunikraftunikraftpull938", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "TREE BUILD Build System Feature ([#1001](https://github.com/unikraft/unikraft/pull/1001))", - "lvl3": "`uklibid`: Library Identifiers ([#938](https://github.com/unikraft/unikraft/pull/938))" - } - }, - { - "content": "`ukreloc`: Self-Relocation and Symbol-based Relocations ([#772](https://github.com/unikraft/unikraft/pull/772))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#ukreloc-self-relocation-and-symbol-based-relocations-#772httpsgithubcomunikraftunikraftpull772", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "`uklibid`: Library Identifiers ([#938](https://github.com/unikraft/unikraft/pull/938))", - "lvl3": "`ukreloc`: Self-Relocation and Symbol-based Relocations ([#772](https://github.com/unikraft/unikraft/pull/772))" - } - }, - { - "content": "Individual Volume Automounting ([#979](https://github.com/unikraft/unikraft/pull/979))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#individual-volume-automounting-#979httpsgithubcomunikraftunikraftpull979", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "`ukreloc`: Self-Relocation and Symbol-based Relocations ([#772](https://github.com/unikraft/unikraft/pull/772))", - "lvl3": "Individual Volume Automounting ([#979](https://github.com/unikraft/unikraft/pull/979))" - } - }, - { - "content": "vDSO and vsyscall Support for Binary Compatibility ([#23](https://github.com/unikraft/app-elfloader/pull/23))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#vdso-and-vsyscall-support-for-binary-compatibility-#23httpsgithubcomunikraftapp-elfloaderpull23", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Individual Volume Automounting ([#979](https://github.com/unikraft/unikraft/pull/979))", - "lvl3": "vDSO and vsyscall Support for Binary Compatibility ([#23](https://github.com/unikraft/app-elfloader/pull/23))" - } - }, - { - "content": "Application Updates", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#application-updates", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "vDSO and vsyscall Support for Binary Compatibility ([#23](https://github.com/unikraft/app-elfloader/pull/23))", - "lvl3": "Application Updates" - } - }, - { - "content": "GitHub Actions for CI ([#1012](https://github.com/unikraft/unikraft/pull/1012))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#github-actions-for-ci-#1012httpsgithubcomunikraftunikraftpull1012", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Application Updates", - "lvl3": "GitHub Actions for CI ([#1012](https://github.com/unikraft/unikraft/pull/1012))" - } - }, - { - "content": "Improved Python Support ([lib-python3:15](https://github.com/unikraft/lib-python3/pull/15))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#improved-python-support-lib-python315httpsgithubcomunikraftlib-python3pull15", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "GitHub Actions for CI ([#1012](https://github.com/unikraft/unikraft/pull/1012))", - "lvl3": "Improved Python Support ([lib-python3:15](https://github.com/unikraft/lib-python3/pull/15))" - } - }, - { - "content": "Updated Go Support ([lib-libgo:#23](https://github.com/unikraft/lib-libgo/pull/7)", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#updated-go-support-lib-libgo#23httpsgithubcomunikraftlib-libgopull7", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Improved Python Support ([lib-python3:15](https://github.com/unikraft/lib-python3/pull/15))", - "lvl3": "Updated Go Support ([lib-libgo:#23](https://github.com/unikraft/lib-libgo/pull/7)" - } - }, - { - "content": "Integrated Clang Support ([#23](https://github.com/unikraft/app-elfloader/pull/23))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#integrated-clang-support-#23httpsgithubcomunikraftapp-elfloaderpull23", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Updated Go Support ([lib-libgo:#23](https://github.com/unikraft/lib-libgo/pull/7)", - "lvl3": "Integrated Clang Support ([#23](https://github.com/unikraft/app-elfloader/pull/23))" - } - }, - { - "content": "Coding Conventions ([docs:#248](https://github.com/unikraft/docs/pull/248))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#coding-conventions-docs#248httpsgithubcomunikraftdocspull248", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Integrated Clang Support ([#23](https://github.com/unikraft/app-elfloader/pull/23))", - "lvl3": "Coding Conventions ([docs:#248](https://github.com/unikraft/docs/pull/248))" - } - }, - { - "content": "External Build System Integration (`kraftld`) ([#957](https://github.com/unikraft/unikraft/pull/957))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#external-build-system-integration-kraftld-#957httpsgithubcomunikraftunikraftpull957", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Coding Conventions ([docs:#248](https://github.com/unikraft/docs/pull/248))", - "lvl3": "External Build System Integration (`kraftld`) ([#957](https://github.com/unikraft/unikraft/pull/957))" - } - }, - { - "content": "`ADOPTERS.md` File ([#892](https://github.com/unikraft/unikraft/pull/892))", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#adoptersmd-file-#892httpsgithubcomunikraftunikraftpull892", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "External Build System Integration (`kraftld`) ([#957](https://github.com/unikraft/unikraft/pull/957))", - "lvl3": "`ADOPTERS.md` File ([#892](https://github.com/unikraft/unikraft/pull/892))" - } - }, - { - "content": "Community Activities", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl2", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#community-activities", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Community Activities", - "lvl3": null - } - }, - { - "content": "Unikraft Summer of Code 2023", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#unikraft-summer-of-code-2023", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Community Activities", - "lvl3": "Unikraft Summer of Code 2023" - } - }, - { - "content": "Unikernels Alliance", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#unikernels-alliance", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Unikraft Summer of Code 2023", - "lvl3": "Unikernels Alliance" - } - }, - { - "content": "Unikernels in the Wild", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#unikernels-in-the-wild", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Unikernels Alliance", - "lvl3": "Unikernels in the Wild" - } - }, - { - "content": "Google Summer of Code 2023", - "id": "//blog/2023-08-18-unikraft-releases-prometheus", - "type": "lvl3", - "url": "/blog/2023-08-18-unikraft-releases-prometheus#google-summer-of-code-2023", - "hierarchy": { - "lvl1": "Unikraft releases v0.14.0 (Prometheus)", - "lvl2": "Unikernels in the Wild", - "lvl3": "Google Summer of Code 2023" - } - }, - { - "content": "Unikraft Open-Source Community", - "id": "//community/about", - "type": "lvl1", - "url": "/community/about", - "hierarchy": { "lvl1": "Unikraft Open-Source Community" } - }, - { - "content": "Events & Meetings", - "id": "//community/events", - "type": "lvl1", - "url": "/community/events", - "hierarchy": { "lvl1": "Events & Meetings" } - }, - { - "content": "Upcoming Events", - "id": "//community/events", - "type": "lvl3", - "url": "/community/events#upcoming-events", - "hierarchy": { - "lvl1": "Events & Meetings", - "lvl2": null, - "lvl3": "Upcoming Events" - } - }, - { - "content": "General Meetings", - "id": "//community/events", - "type": "lvl2", - "url": "/community/events#general-meetings", - "hierarchy": { - "lvl1": "Events & Meetings", - "lvl2": "General Meetings", - "lvl3": null - } - }, - { - "content": "Building a unikernel", - "id": "//docs/cli/building", - "type": "lvl1", - "url": "/docs/cli/building", - "hierarchy": { "lvl1": "Building a unikernel" } - }, - { - "content": "Initializing a project with a `Kraftfile`", - "id": "//docs/cli/building", - "type": "lvl2", - "url": "/docs/cli/building#initializing-a-project-with-a-kraftfile", - "hierarchy": { - "lvl1": "Building a unikernel", - "lvl2": "Initializing a project with a `Kraftfile`", - "lvl3": null - } - }, - { - "content": "Configuring your project", - "id": "//docs/cli/building", - "type": "lvl2", - "url": "/docs/cli/building#configuring-your-project", - "hierarchy": { - "lvl1": "Building a unikernel", - "lvl2": "Configuring your project", - "lvl3": null - } - }, - { - "content": "Compiling and linking your application with Unikraft", - "id": "//docs/cli/building", - "type": "lvl2", - "url": "/docs/cli/building#compiling-and-linking-your-application-with-unikraft", - "hierarchy": { - "lvl1": "Building a unikernel", - "lvl2": "Compiling and linking your application with Unikraft", - "lvl3": null - } - }, - { - "content": "Building KraftKit from source", - "id": "//docs/cli/hacking", - "type": "lvl1", - "url": "/docs/cli/hacking", - "hierarchy": { "lvl1": "Building KraftKit from source" } - }, - { - "content": "Using a developer environment", - "id": "//docs/cli/hacking", - "type": "lvl2", - "url": "/docs/cli/hacking#using-a-developer-environment", - "hierarchy": { - "lvl1": "Building KraftKit from source", - "lvl2": "Using a developer environment", - "lvl3": null - } - }, - { - "content": "GitHub Codespace", - "id": "//docs/cli/hacking", - "type": "lvl3", - "url": "/docs/cli/hacking#github-codespace", - "hierarchy": { - "lvl1": "Building KraftKit from source", - "lvl2": "Using a developer environment", - "lvl3": "GitHub Codespace" - } - }, - { - "content": "Local Docker/container environment", - "id": "//docs/cli/hacking", - "type": "lvl3", - "url": "/docs/cli/hacking#local-dockercontainer-environment", - "hierarchy": { - "lvl1": "Building KraftKit from source", - "lvl2": "GitHub Codespace", - "lvl3": "Local Docker/container environment" - } - }, - { - "content": "Building the `kraft` binary", - "id": "//docs/cli/hacking", - "type": "lvl2", - "url": "/docs/cli/hacking#building-the-kraft-binary", - "hierarchy": { - "lvl1": "Building KraftKit from source", - "lvl2": "Building the `kraft` binary", - "lvl3": null - } - }, - { - "content": "Preparation for submitting pull requests", - "id": "//docs/cli/hacking", - "type": "lvl2", - "url": "/docs/cli/hacking#preparation-for-submitting-pull-requests", - "hierarchy": { - "lvl1": "Building KraftKit from source", - "lvl2": "Preparation for submitting pull requests", - "lvl3": null - } - }, - { - "content": "The KraftKit Go SDK", - "id": "//docs/cli/hacking", - "type": "lvl2", - "url": "/docs/cli/hacking#the-kraftkit-go-sdk", - "hierarchy": { - "lvl1": "Building KraftKit from source", - "lvl2": "The KraftKit Go SDK", - "lvl3": null - } - }, - { - "content": "Unikraft CLI Companion Tool", - "id": "//docs/cli/", - "type": "lvl1", - "url": "/docs/cli/", - "hierarchy": { "lvl1": "Unikraft CLI Companion Tool" } - }, - { - "content": "Quick-start example based on `qemu/x86_64`", - "id": "//docs/cli/", - "type": "lvl2", - "url": "/docs/cli/#quick-start-example-based-on-qemux86_64", - "hierarchy": { - "lvl1": "Unikraft CLI Companion Tool", - "lvl2": "Quick-start example based on `qemu/x86_64`", - "lvl3": null - } - }, - { - "content": "Next steps", - "id": "//docs/cli/", - "type": "lvl2", - "url": "/docs/cli/#next-steps", - "hierarchy": { - "lvl1": "Unikraft CLI Companion Tool", - "lvl2": "Next steps", - "lvl3": null - } - }, - { - "content": "Installation", - "id": "//docs/cli/install", - "type": "lvl1", - "url": "/docs/cli/install", - "hierarchy": { "lvl1": "Installation" } - }, - { - "content": "Recommended installation method", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#recommended-installation-method", - "hierarchy": { - "lvl1": "Installation", - "lvl2": "Recommended installation method", - "lvl3": null - } - }, - { - "content": "macOS", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#macos", - "hierarchy": { "lvl1": "Installation", "lvl2": "macOS", "lvl3": null } - }, - { - "content": "Debian/Ubuntu", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#debianubuntu", - "hierarchy": { - "lvl1": "Installation", - "lvl2": "Debian/Ubuntu", - "lvl3": null - } - }, - { - "content": "Fedora/RHEL", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#fedorarhel", - "hierarchy": { "lvl1": "Installation", "lvl2": "Fedora/RHEL", "lvl3": null } - }, - { - "content": "Arch Linux", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#arch-linux", - "hierarchy": { "lvl1": "Installation", "lvl2": "Arch Linux", "lvl3": null } - }, - { - "content": "Windows", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#windows", - "hierarchy": { "lvl1": "Installation", "lvl2": "Windows", "lvl3": null } - }, - { - "content": "Troubleshooting", - "id": "//docs/cli/install", - "type": "lvl3", - "url": "/docs/cli/install#troubleshooting", - "hierarchy": { - "lvl1": "Installation", - "lvl2": "Windows", - "lvl3": "Troubleshooting" - } - }, - { - "content": "Build unikernels from within a container", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#build-unikernels-from-within-a-container", - "hierarchy": { - "lvl1": "Installation", - "lvl2": "Build unikernels from within a container", - "lvl3": null - } - }, - { - "content": "From source", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#from-source", - "hierarchy": { "lvl1": "Installation", "lvl2": "From source", "lvl3": null } - }, - { - "content": "See also", - "id": "//docs/cli/install", - "type": "lvl2", - "url": "/docs/cli/install#see-also", - "hierarchy": { "lvl1": "Installation", "lvl2": "See also", "lvl3": null } - }, - { - "content": "Options", - "id": "//docs/cli/options", - "type": "lvl1", - "url": "/docs/cli/options", - "hierarchy": { "lvl1": "Options" } - }, - { - "content": "Overview of configuration options", - "id": "//docs/cli/options", - "type": "lvl2", - "url": "/docs/cli/options#overview-of-configuration-options", - "hierarchy": { - "lvl1": "Options", - "lvl2": "Overview of configuration options", - "lvl3": null - } - }, - { - "content": "Additional influential environmental variables", - "id": "//docs/cli/options", - "type": "lvl2", - "url": "/docs/cli/options#additional-influential-environmental-variables", - "hierarchy": { - "lvl1": "Options", - "lvl2": "Additional influential environmental variables", - "lvl3": null - } - }, - { - "content": "Best practice recommendations", - "id": "//docs/cli/options", - "type": "lvl2", - "url": "/docs/cli/options#best-practice-recommendations", - "hierarchy": { - "lvl1": "Options", - "lvl2": "Best practice recommendations", - "lvl3": null - } - }, - { - "content": "Packaging unikernels", - "id": "//docs/cli/packaging", - "type": "lvl1", - "url": "/docs/cli/packaging", - "hierarchy": { "lvl1": "Packaging unikernels" } - }, - { - "content": "Checking for updates", - "id": "//docs/cli/packaging", - "type": "lvl2", - "url": "/docs/cli/packaging#checking-for-updates", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Checking for updates", - "lvl3": null - } - }, - { - "content": "Package component types", - "id": "//docs/cli/packaging", - "type": "lvl2", - "url": "/docs/cli/packaging#package-component-types", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Package component types", - "lvl3": null - } - }, - { - "content": "Package Manages", - "id": "//docs/cli/packaging", - "type": "lvl2", - "url": "/docs/cli/packaging#package-manages", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Package Manages", - "lvl3": null - } - }, - { - "content": "Manifest-based packages", - "id": "//docs/cli/packaging", - "type": "lvl3", - "url": "/docs/cli/packaging#manifest-based-packages", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Package Manages", - "lvl3": "Manifest-based packages" - } - }, - { - "content": "OCI-based packages", - "id": "//docs/cli/packaging", - "type": "lvl3", - "url": "/docs/cli/packaging#oci-based-packages", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Manifest-based packages", - "lvl3": "OCI-based packages" - } - }, - { - "content": "Listing and searching for packages", - "id": "//docs/cli/packaging", - "type": "lvl2", - "url": "/docs/cli/packaging#listing-and-searching-for-packages", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Listing and searching for packages", - "lvl3": null - } - }, - { - "content": "Sourcing additional packages", - "id": "//docs/cli/packaging", - "type": "lvl2", - "url": "/docs/cli/packaging#sourcing-additional-packages", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Sourcing additional packages", - "lvl3": null - } - }, - { - "content": "Removing a source of packages", - "id": "//docs/cli/packaging", - "type": "lvl3", - "url": "/docs/cli/packaging#removing-a-source-of-packages", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Sourcing additional packages", - "lvl3": "Removing a source of packages" - } - }, - { - "content": "Retrieving a package", - "id": "//docs/cli/packaging", - "type": "lvl2", - "url": "/docs/cli/packaging#retrieving-a-package", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Retrieving a package", - "lvl3": null - } - }, - { - "content": "Packaging your application", - "id": "//docs/cli/packaging", - "type": "lvl2", - "url": "/docs/cli/packaging#packaging-your-application", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Packaging your application", - "lvl3": null - } - }, - { - "content": "Distributing your application", - "id": "//docs/cli/packaging", - "type": "lvl2", - "url": "/docs/cli/packaging#distributing-your-application", - "hierarchy": { - "lvl1": "Packaging unikernels", - "lvl2": "Distributing your application", - "lvl3": null - } - }, - { - "content": "kraft build", - "id": "//docs/cli/reference/kraft/build", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/build", - "hierarchy": { "lvl1": "kraft build" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/build", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/build#examples", - "hierarchy": { "lvl1": "kraft build", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/build", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/build#options", - "hierarchy": { "lvl1": "kraft build", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/build", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/build#see-also", - "hierarchy": { "lvl1": "kraft build", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft clean", - "id": "//docs/cli/reference/kraft/clean", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/clean", - "hierarchy": { "lvl1": "kraft clean" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/clean", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/clean#examples", - "hierarchy": { "lvl1": "kraft clean", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/clean", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/clean#options", - "hierarchy": { "lvl1": "kraft clean", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/clean", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/clean#see-also", - "hierarchy": { "lvl1": "kraft clean", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft fetch", - "id": "//docs/cli/reference/kraft/fetch", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/fetch", - "hierarchy": { "lvl1": "kraft fetch" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/fetch", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/fetch#examples", - "hierarchy": { "lvl1": "kraft fetch", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/fetch", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/fetch#options", - "hierarchy": { "lvl1": "kraft fetch", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/fetch", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/fetch#see-also", - "hierarchy": { "lvl1": "kraft fetch", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft", - "id": "//docs/cli/reference/kraft/", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/", - "hierarchy": { "lvl1": "kraft" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/#options", - "hierarchy": { "lvl1": "kraft", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/#see-also", - "hierarchy": { "lvl1": "kraft", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft inspect", - "id": "//docs/cli/reference/kraft/inspect", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/inspect", - "hierarchy": { "lvl1": "kraft inspect" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/inspect", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/inspect#options", - "hierarchy": { "lvl1": "kraft inspect", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/inspect", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/inspect#see-also", - "hierarchy": { "lvl1": "kraft inspect", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft login", - "id": "//docs/cli/reference/kraft/login", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/login", - "hierarchy": { "lvl1": "kraft login" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/login", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/login#options", - "hierarchy": { "lvl1": "kraft login", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/login", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/login#see-also", - "hierarchy": { "lvl1": "kraft login", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft logs", - "id": "//docs/cli/reference/kraft/logs", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/logs", - "hierarchy": { "lvl1": "kraft logs" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/logs", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/logs#options", - "hierarchy": { "lvl1": "kraft logs", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/logs", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/logs#see-also", - "hierarchy": { "lvl1": "kraft logs", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft menu", - "id": "//docs/cli/reference/kraft/menu", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/menu", - "hierarchy": { "lvl1": "kraft menu" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/menu", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/menu#examples", - "hierarchy": { "lvl1": "kraft menu", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/menu", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/menu#options", - "hierarchy": { "lvl1": "kraft menu", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/menu", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/menu#see-also", - "hierarchy": { "lvl1": "kraft menu", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft pkg", - "id": "//docs/cli/reference/kraft/pkg", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/pkg", - "hierarchy": { "lvl1": "kraft pkg" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/pkg", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/pkg#examples", - "hierarchy": { "lvl1": "kraft pkg", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/pkg", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg#options", - "hierarchy": { "lvl1": "kraft pkg", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/pkg", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg#see-also", - "hierarchy": { "lvl1": "kraft pkg", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft pkg list", - "id": "//docs/cli/reference/kraft/pkg/list", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/pkg/list", - "hierarchy": { "lvl1": "kraft pkg list" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/pkg/list", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/pkg/list#examples", - "hierarchy": { "lvl1": "kraft pkg list", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/pkg/list", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/list#options", - "hierarchy": { "lvl1": "kraft pkg list", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/pkg/list", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/list#see-also", - "hierarchy": { "lvl1": "kraft pkg list", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft pkg pull", - "id": "//docs/cli/reference/kraft/pkg/pull", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/pkg/pull", - "hierarchy": { "lvl1": "kraft pkg pull" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/pkg/pull", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/pkg/pull#examples", - "hierarchy": { "lvl1": "kraft pkg pull", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/pkg/pull", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/pull#options", - "hierarchy": { "lvl1": "kraft pkg pull", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/pkg/pull", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/pull#see-also", - "hierarchy": { "lvl1": "kraft pkg pull", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft pkg push", - "id": "//docs/cli/reference/kraft/pkg/push", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/pkg/push", - "hierarchy": { "lvl1": "kraft pkg push" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/pkg/push", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/pkg/push#examples", - "hierarchy": { "lvl1": "kraft pkg push", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/pkg/push", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/push#options", - "hierarchy": { "lvl1": "kraft pkg push", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/pkg/push", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/push#see-also", - "hierarchy": { "lvl1": "kraft pkg push", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft pkg source", - "id": "//docs/cli/reference/kraft/pkg/source", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/pkg/source", - "hierarchy": { "lvl1": "kraft pkg source" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/pkg/source", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/pkg/source#examples", - "hierarchy": { - "lvl1": "kraft pkg source", - "lvl2": null, - "lvl3": "Examples" - } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/pkg/source", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/source#options", - "hierarchy": { "lvl1": "kraft pkg source", "lvl2": "Options", "lvl3": null } - }, - { - "content": "Options inherited from parent commands", - "id": "//docs/cli/reference/kraft/pkg/source", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/source#options-inherited-from-parent-commands", - "hierarchy": { - "lvl1": "kraft pkg source", - "lvl2": "Options inherited from parent commands", - "lvl3": null - } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/pkg/source", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/source#see-also", - "hierarchy": { - "lvl1": "kraft pkg source", - "lvl2": "See Also", - "lvl3": null - } - }, - { - "content": "kraft pkg unsource", - "id": "//docs/cli/reference/kraft/pkg/unsource", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/pkg/unsource", - "hierarchy": { "lvl1": "kraft pkg unsource" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/pkg/unsource", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/pkg/unsource#examples", - "hierarchy": { - "lvl1": "kraft pkg unsource", - "lvl2": null, - "lvl3": "Examples" - } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/pkg/unsource", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/unsource#options", - "hierarchy": { - "lvl1": "kraft pkg unsource", - "lvl2": "Options", - "lvl3": null - } - }, - { - "content": "Options inherited from parent commands", - "id": "//docs/cli/reference/kraft/pkg/unsource", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/unsource#options-inherited-from-parent-commands", - "hierarchy": { - "lvl1": "kraft pkg unsource", - "lvl2": "Options inherited from parent commands", - "lvl3": null - } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/pkg/unsource", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/unsource#see-also", - "hierarchy": { - "lvl1": "kraft pkg unsource", - "lvl2": "See Also", - "lvl3": null - } - }, - { - "content": "kraft pkg update", - "id": "//docs/cli/reference/kraft/pkg/update", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/pkg/update", - "hierarchy": { "lvl1": "kraft pkg update" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/pkg/update", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/pkg/update#examples", - "hierarchy": { - "lvl1": "kraft pkg update", - "lvl2": null, - "lvl3": "Examples" - } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/pkg/update", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/update#options", - "hierarchy": { "lvl1": "kraft pkg update", "lvl2": "Options", "lvl3": null } - }, - { - "content": "Options inherited from parent commands", - "id": "//docs/cli/reference/kraft/pkg/update", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/update#options-inherited-from-parent-commands", - "hierarchy": { - "lvl1": "kraft pkg update", - "lvl2": "Options inherited from parent commands", - "lvl3": null - } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/pkg/update", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/pkg/update#see-also", - "hierarchy": { - "lvl1": "kraft pkg update", - "lvl2": "See Also", - "lvl3": null - } - }, - { - "content": "kraft prepare", - "id": "//docs/cli/reference/kraft/prepare", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/prepare", - "hierarchy": { "lvl1": "kraft prepare" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/prepare", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/prepare#examples", - "hierarchy": { "lvl1": "kraft prepare", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/prepare", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/prepare#options", - "hierarchy": { "lvl1": "kraft prepare", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/prepare", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/prepare#see-also", - "hierarchy": { "lvl1": "kraft prepare", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft ps", - "id": "//docs/cli/reference/kraft/ps", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/ps", - "hierarchy": { "lvl1": "kraft ps" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/ps", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/ps#options", - "hierarchy": { "lvl1": "kraft ps", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/ps", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/ps#see-also", - "hierarchy": { "lvl1": "kraft ps", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft rm", - "id": "//docs/cli/reference/kraft/rm", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/rm", - "hierarchy": { "lvl1": "kraft rm" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/rm", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/rm#options", - "hierarchy": { "lvl1": "kraft rm", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/rm", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/rm#see-also", - "hierarchy": { "lvl1": "kraft rm", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft run", - "id": "//docs/cli/reference/kraft/run", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/run", - "hierarchy": { "lvl1": "kraft run" } - }, - { - "content": "Examples", - "id": "//docs/cli/reference/kraft/run", - "type": "lvl3", - "url": "/docs/cli/reference/kraft/run#examples", - "hierarchy": { "lvl1": "kraft run", "lvl2": null, "lvl3": "Examples" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/run", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/run#options", - "hierarchy": { "lvl1": "kraft run", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/run", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/run#see-also", - "hierarchy": { "lvl1": "kraft run", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft stop", - "id": "//docs/cli/reference/kraft/stop", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/stop", - "hierarchy": { "lvl1": "kraft stop" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/stop", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/stop#options", - "hierarchy": { "lvl1": "kraft stop", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/stop", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/stop#see-also", - "hierarchy": { "lvl1": "kraft stop", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "kraft version", - "id": "//docs/cli/reference/kraft/version", - "type": "lvl1", - "url": "/docs/cli/reference/kraft/version", - "hierarchy": { "lvl1": "kraft version" } - }, - { - "content": "Options", - "id": "//docs/cli/reference/kraft/version", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/version#options", - "hierarchy": { "lvl1": "kraft version", "lvl2": "Options", "lvl3": null } - }, - { - "content": "See Also", - "id": "//docs/cli/reference/kraft/version", - "type": "lvl2", - "url": "/docs/cli/reference/kraft/version#see-also", - "hierarchy": { "lvl1": "kraft version", "lvl2": "See Also", "lvl3": null } - }, - { - "content": "Kraftfile Reference (v0.5)", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl1", - "url": "/docs/cli/reference/kraftfile", - "hierarchy": { "lvl1": "Kraftfile Reference (v0.5)" } - }, - { - "content": "File names", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl2", - "url": "/docs/cli/reference/kraftfile#file-names", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "File names", - "lvl3": null - } - }, - { - "content": "Top-level `specification` and `name` attributes", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl2", - "url": "/docs/cli/reference/kraftfile#top-level-specification-and-name-attributes", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "Top-level `specification` and `name` attributes", - "lvl3": null - } - }, - { - "content": "Top-level `unikraft` attribute", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl2", - "url": "/docs/cli/reference/kraftfile#top-level-unikraft-attribute", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "Top-level `unikraft` attribute", - "lvl3": null - } - }, - { - "content": "Setting a specific version", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl3", - "url": "/docs/cli/reference/kraftfile#setting-a-specific-version", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "Top-level `unikraft` attribute", - "lvl3": "Setting a specific version" - } - }, - { - "content": "Setting a specific source location", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl3", - "url": "/docs/cli/reference/kraftfile#setting-a-specific-source-location", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "Setting a specific version", - "lvl3": "Setting a specific source location" - } - }, - { - "content": "Specifying KConfig configuration", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl3", - "url": "/docs/cli/reference/kraftfile#specifying-kconfig-configuration", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "Setting a specific source location", - "lvl3": "Specifying KConfig configuration" - } - }, - { - "content": "A more complex example", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl3", - "url": "/docs/cli/reference/kraftfile#a-more-complex-example", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "Specifying KConfig configuration", - "lvl3": "A more complex example" - } - }, - { - "content": "Top-level `libraries` attributes", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl2", - "url": "/docs/cli/reference/kraftfile#top-level-libraries-attributes", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "Top-level `libraries` attributes", - "lvl3": null - } - }, - { - "content": "Top-level `targets` attributes", - "id": "//docs/cli/reference/kraftfile", - "type": "lvl2", - "url": "/docs/cli/reference/kraftfile#top-level-targets-attributes", - "hierarchy": { - "lvl1": "Kraftfile Reference (v0.5)", - "lvl2": "Top-level `targets` attributes", - "lvl3": null - } - }, - { - "content": "Running unikernels locally", - "id": "//docs/cli/running", - "type": "lvl1", - "url": "/docs/cli/running", - "hierarchy": { "lvl1": "Running unikernels locally" } - }, - { - "content": "Running after building a project", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#running-after-building-a-project", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Running after building a project", - "lvl3": null - } - }, - { - "content": "Running a Unikraft kernel binary image", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#running-a-unikraft-kernel-binary-image", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Running a Unikraft kernel binary image", - "lvl3": null - } - }, - { - "content": "Running a Linux userspace application (via a loader)", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#running-a-linux-userspace-application-via-a-loader", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Running a Linux userspace application (via a loader)", - "lvl3": null - } - }, - { - "content": "Running pre-built OCI-packaged images", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#running-pre-built-oci-packaged-images", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Running pre-built OCI-packaged images", - "lvl3": null - } - }, - { - "content": "Connecting a unikernel instance to a network", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#connecting-a-unikernel-instance-to-a-network", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Connecting a unikernel instance to a network", - "lvl3": null - } - }, - { - "content": "Forwarding exposed ports to your host", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#forwarding-exposed-ports-to-your-host", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Forwarding exposed ports to your host", - "lvl3": null - } - }, - { - "content": "Using initramfs vs. a mounted volume", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#using-initramfs-vs-a-mounted-volume", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Using initramfs vs. a mounted volume", - "lvl3": null - } - }, - { - "content": "Supplying command-line arguments", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#supplying-command-line-arguments", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Supplying command-line arguments", - "lvl3": null - } - }, - { - "content": "Viewing unikernel instances", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#viewing-unikernel-instances", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Viewing unikernel instances", - "lvl3": null - } - }, - { - "content": "Stopping and removing unikernel instances", - "id": "//docs/cli/running", - "type": "lvl2", - "url": "/docs/cli/running#stopping-and-removing-unikernel-instances", - "hierarchy": { - "lvl1": "Running unikernels locally", - "lvl2": "Stopping and removing unikernel instances", - "lvl3": null - } - }, - { - "content": "Build Process", - "id": "//docs/concepts/build-process", - "type": "lvl1", - "url": "/docs/concepts/build-process", - "hierarchy": { "lvl1": "Build Process" } - }, - { - "content": "GNU Make-based build system", - "id": "//docs/concepts/build-process", - "type": "lvl2", - "url": "/docs/concepts/build-process#gnu-make-based-build-system", - "hierarchy": { - "lvl1": "Build Process", - "lvl2": "GNU Make-based build system", - "lvl3": null - } - }, - { - "content": "Compatibility", - "id": "//docs/concepts/compatibility", - "type": "lvl1", - "url": "/docs/concepts/compatibility", - "hierarchy": { "lvl1": "Compatibility" } - }, - { - "content": "A Trip Down POSIX-Compatibility Lane", - "id": "//docs/concepts/compatibility", - "type": "lvl2", - "url": "/docs/concepts/compatibility#a-trip-down-posix-compatibility-lane", - "hierarchy": { - "lvl1": "Compatibility", - "lvl2": "A Trip Down POSIX-Compatibility Lane", - "lvl3": null - } - }, - { - "content": "Looking Under the System Call API Hood", - "id": "//docs/concepts/compatibility", - "type": "lvl3", - "url": "/docs/concepts/compatibility#looking-under-the-system-call-api-hood", - "hierarchy": { - "lvl1": "Compatibility", - "lvl2": "A Trip Down POSIX-Compatibility Lane", - "lvl3": "Looking Under the System Call API Hood" - } - }, - { - "content": "Results and Insights", - "id": "//docs/concepts/compatibility", - "type": "lvl3", - "url": "/docs/concepts/compatibility#results-and-insights", - "hierarchy": { - "lvl1": "Compatibility", - "lvl2": "Looking Under the System Call API Hood", - "lvl3": "Results and Insights" - } - }, - { - "content": "Design Principles", - "id": "//docs/concepts/design-principles", - "type": "lvl1", - "url": "/docs/concepts/design-principles", - "hierarchy": { "lvl1": "Design Principles" } - }, - { - "content": "Problems with Monolithic OSes", - "id": "//docs/concepts/design-principles", - "type": "lvl2", - "url": "/docs/concepts/design-principles#problems-with-monolithic-oses", - "hierarchy": { - "lvl1": "Design Principles", - "lvl2": "Problems with Monolithic OSes", - "lvl3": null - } - }, - { - "content": "Approaches to building a unikernel", - "id": "//docs/concepts/design-principles", - "type": "lvl2", - "url": "/docs/concepts/design-principles#approaches-to-building-a-unikernel", - "hierarchy": { - "lvl1": "Design Principles", - "lvl2": "Approaches to building a unikernel", - "lvl3": null - } - }, - { - "content": "Minimizing an existing general-purpose OS", - "id": "//docs/concepts/design-principles", - "type": "lvl3", - "url": "/docs/concepts/design-principles#minimizing-an-existing-general-purpose-os", - "hierarchy": { - "lvl1": "Design Principles", - "lvl2": "Approaches to building a unikernel", - "lvl3": "Minimizing an existing general-purpose OS" - } - }, - { - "content": "By-passing the OS", - "id": "//docs/concepts/design-principles", - "type": "lvl3", - "url": "/docs/concepts/design-principles#by-passing-the-os", - "hierarchy": { - "lvl1": "Design Principles", - "lvl2": "Minimizing an existing general-purpose OS", - "lvl3": "By-passing the OS" - } - }, - { - "content": "Starting from scratch", - "id": "//docs/concepts/design-principles", - "type": "lvl3", - "url": "/docs/concepts/design-principles#starting-from-scratch", - "hierarchy": { - "lvl1": "Design Principles", - "lvl2": "By-passing the OS", - "lvl3": "Starting from scratch" - } - }, - { - "content": "Unikraft's approach", - "id": "//docs/concepts/design-principles", - "type": "lvl2", - "url": "/docs/concepts/design-principles#unikrafts-approach", - "hierarchy": { - "lvl1": "Design Principles", - "lvl2": "Unikraft's approach", - "lvl3": null - } - }, - { - "content": "Efficiency", - "id": "//docs/concepts/efficiency", - "type": "lvl1", - "url": "/docs/concepts/efficiency", - "hierarchy": { "lvl1": "Efficiency" } - }, - { - "content": "Concepts", - "id": "//docs/concepts/", - "type": "lvl1", - "url": "/docs/concepts/", - "hierarchy": { "lvl1": "Concepts" } - }, - { - "content": "Introduction to unikernels", - "id": "//docs/concepts/", - "type": "lvl2", - "url": "/docs/concepts/#introduction-to-unikernels", - "hierarchy": { - "lvl1": "Concepts", - "lvl2": "Introduction to unikernels", - "lvl3": null - } - }, - { - "content": "Componenization", - "id": "//docs/concepts/", - "type": "lvl2", - "url": "/docs/concepts/#componenization", - "hierarchy": { "lvl1": "Concepts", "lvl2": "Componenization", "lvl3": null } - }, - { - "content": "Configurability", - "id": "//docs/concepts/", - "type": "lvl2", - "url": "/docs/concepts/#configurability", - "hierarchy": { "lvl1": "Concepts", "lvl2": "Configurability", "lvl3": null } - }, - { - "content": "Tooling and Integrations", - "id": "//docs/concepts/", - "type": "lvl2", - "url": "/docs/concepts/#tooling-and-integrations", - "hierarchy": { - "lvl1": "Concepts", - "lvl2": "Tooling and Integrations", - "lvl3": null - } - }, - { - "content": "Performance", - "id": "//docs/concepts/performance", - "type": "lvl1", - "url": "/docs/concepts/performance", - "hierarchy": { "lvl1": "Performance" } - }, - { - "content": "Image Size", - "id": "//docs/concepts/performance", - "type": "lvl2", - "url": "/docs/concepts/performance#image-size", - "hierarchy": { "lvl1": "Performance", "lvl2": "Image Size", "lvl3": null } - }, - { - "content": "Boot Times", - "id": "//docs/concepts/performance", - "type": "lvl2", - "url": "/docs/concepts/performance#boot-times", - "hierarchy": { "lvl1": "Performance", "lvl2": "Boot Times", "lvl3": null } - }, - { - "content": "Memory Consumption", - "id": "//docs/concepts/performance", - "type": "lvl2", - "url": "/docs/concepts/performance#memory-consumption", - "hierarchy": { - "lvl1": "Performance", - "lvl2": "Memory Consumption", - "lvl3": null - } - }, - { - "content": "Application Performance", - "id": "//docs/concepts/performance", - "type": "lvl2", - "url": "/docs/concepts/performance#application-performance", - "hierarchy": { - "lvl1": "Performance", - "lvl2": "Application Performance", - "lvl3": null - } - }, - { - "content": "Security", - "id": "//docs/concepts/security", - "type": "lvl1", - "url": "/docs/concepts/security", - "hierarchy": { "lvl1": "Security" } - }, - { - "content": "Minimal Attack Surface", - "id": "//docs/concepts/security", - "type": "lvl2", - "url": "/docs/concepts/security#minimal-attack-surface", - "hierarchy": { - "lvl1": "Security", - "lvl2": "Minimal Attack Surface", - "lvl3": null - } - }, - { - "content": "Strong Cross-Application Isolation", - "id": "//docs/concepts/security", - "type": "lvl2", - "url": "/docs/concepts/security#strong-cross-application-isolation", - "hierarchy": { - "lvl1": "Security", - "lvl2": "Strong Cross-Application Isolation", - "lvl3": null - } - }, - { - "content": "Safe Languages", - "id": "//docs/concepts/security", - "type": "lvl2", - "url": "/docs/concepts/security#safe-languages", - "hierarchy": { "lvl1": "Security", "lvl2": "Safe Languages", "lvl3": null } - }, - { - "content": "Security Features and Testing: Matching Linux", - "id": "//docs/concepts/security", - "type": "lvl2", - "url": "/docs/concepts/security#security-features-and-testing-matching-linux", - "hierarchy": { - "lvl1": "Security", - "lvl2": "Security Features and Testing: Matching Linux", - "lvl3": null - } - }, - { - "content": "Unikraft Security Features", - "id": "//docs/concepts/security", - "type": "lvl2", - "url": "/docs/concepts/security#unikraft-security-features", - "hierarchy": { - "lvl1": "Security", - "lvl2": "Unikraft Security Features", - "lvl3": null - } - }, - { - "content": "Testing", - "id": "//docs/concepts/security", - "type": "lvl2", - "url": "/docs/concepts/security#testing", - "hierarchy": { "lvl1": "Security", "lvl2": "Testing", "lvl3": null } - }, - { - "content": "Fine-Grained Compartmentalization", - "id": "//docs/concepts/security", - "type": "lvl2", - "url": "/docs/concepts/security#fine-grained-compartmentalization", - "hierarchy": { - "lvl1": "Security", - "lvl2": "Fine-Grained Compartmentalization", - "lvl3": null - } - }, - { - "content": "Virtualization", - "id": "//docs/concepts/virtualization", - "type": "lvl1", - "url": "/docs/concepts/virtualization", - "hierarchy": { "lvl1": "Virtualization" } - }, - { - "content": "Virtual Machines", - "id": "//docs/concepts/virtualization", - "type": "lvl2", - "url": "/docs/concepts/virtualization#virtual-machines", - "hierarchy": { - "lvl1": "Virtualization", - "lvl2": "Virtual Machines", - "lvl3": null - } - }, - { - "content": "Supported platforms", - "id": "//docs/concepts/virtualization", - "type": "lvl2", - "url": "/docs/concepts/virtualization#supported-platforms", - "hierarchy": { - "lvl1": "Virtualization", - "lvl2": "Supported platforms", - "lvl3": null - } - }, - { - "content": "Future virtualization support", - "id": "//docs/concepts/virtualization", - "type": "lvl2", - "url": "/docs/concepts/virtualization#future-virtualization-support", - "hierarchy": { - "lvl1": "Virtualization", - "lvl2": "Future virtualization support", - "lvl3": null - } - }, - { - "content": "Contributing", - "id": "//docs/contributing/", - "type": "lvl1", - "url": "/docs/contributing/", - "hierarchy": { "lvl1": "Contributing" } - }, - { - "content": "Submitting changes to Unikraft core repositories", - "id": "//docs/contributing/unikraft", - "type": "lvl1", - "url": "/docs/contributing/unikraft", - "hierarchy": { "lvl1": "Submitting changes to Unikraft core repositories" } - }, - { - "content": "Submission Checklist", - "id": "//docs/contributing/unikraft", - "type": "lvl3", - "url": "/docs/contributing/unikraft#submission-checklist", - "hierarchy": { - "lvl1": "Submitting changes to Unikraft core repositories", - "lvl2": null, - "lvl3": "Submission Checklist" - } - }, - { - "content": "Commits", - "id": "//docs/contributing/unikraft", - "type": "lvl2", - "url": "/docs/contributing/unikraft#commits", - "hierarchy": { - "lvl1": "Submitting changes to Unikraft core repositories", - "lvl2": "Commits", - "lvl3": null - } - }, - { - "content": "Commit Message Format", - "id": "//docs/contributing/unikraft", - "type": "lvl3", - "url": "/docs/contributing/unikraft#commit-message-format", - "hierarchy": { - "lvl1": "Submitting changes to Unikraft core repositories", - "lvl2": "Commits", - "lvl3": "Commit Message Format" - } - }, - { - "content": "Developer's Certificate of Origin", - "id": "//docs/contributing/unikraft", - "type": "lvl3", - "url": "/docs/contributing/unikraft#developers-certificate-of-origin", - "hierarchy": { - "lvl1": "Submitting changes to Unikraft core repositories", - "lvl2": "Commit Message Format", - "lvl3": "Developer's Certificate of Origin" - } - }, - { - "content": "Example Commit Message", - "id": "//docs/contributing/unikraft", - "type": "lvl3", - "url": "/docs/contributing/unikraft#example-commit-message", - "hierarchy": { - "lvl1": "Submitting changes to Unikraft core repositories", - "lvl2": "Developer's Certificate of Origin", - "lvl3": "Example Commit Message" - } - }, - { - "content": "Addressing Multiple Authors", - "id": "//docs/contributing/unikraft", - "type": "lvl2", - "url": "/docs/contributing/unikraft#addressing-multiple-authors", - "hierarchy": { - "lvl1": "Submitting changes to Unikraft core repositories", - "lvl2": "Addressing Multiple Authors", - "lvl3": null - } - }, - { - "content": "Rebasing and Squashing", - "id": "//docs/contributing/unikraft", - "type": "lvl2", - "url": "/docs/contributing/unikraft#rebasing-and-squashing", - "hierarchy": { - "lvl1": "Submitting changes to Unikraft core repositories", - "lvl2": "Rebasing and Squashing", - "lvl3": null - } - }, - { - "content": "FAQ", - "id": "//docs/faq", - "type": "lvl1", - "url": "/docs/faq", - "hierarchy": { "lvl1": "FAQ" } - }, - { - "content": "Comparison", - "id": "//docs/getting-started/comparisons", - "type": "lvl1", - "url": "/docs/getting-started/comparisons", - "hierarchy": { "lvl1": "Comparison" } - }, - { - "content": "Welcome to Unikraft's Documentation 👋", - "id": "//docs/getting-started/", - "type": "lvl1", - "url": "/docs/getting-started/", - "hierarchy": { "lvl1": "Welcome to Unikraft's Documentation 👋" } - }, - { - "content": "Overview", - "id": "//docs/getting-started/", - "type": "lvl2", - "url": "/docs/getting-started/#overview", - "hierarchy": { - "lvl1": "Welcome to Unikraft's Documentation 👋", - "lvl2": "Overview", - "lvl3": null - } - }, - { - "content": "Quick-start", - "id": "//docs/getting-started/", - "type": "lvl2", - "url": "/docs/getting-started/#quick-start", - "hierarchy": { - "lvl1": "Welcome to Unikraft's Documentation 👋", - "lvl2": "Quick-start", - "lvl3": null - } - }, - { - "content": "Language Guides", - "id": "//docs/getting-started/", - "type": "lvl2", - "url": "/docs/getting-started/#language-guides", - "hierarchy": { - "lvl1": "Welcome to Unikraft's Documentation 👋", - "lvl2": "Language Guides", - "lvl3": null - } - }, - { - "content": "Contribute", - "id": "//docs/getting-started/", - "type": "lvl2", - "url": "/docs/getting-started/#contribute", - "hierarchy": { - "lvl1": "Welcome to Unikraft's Documentation 👋", - "lvl2": "Contribute", - "lvl3": null - } - }, - { - "content": "GitHub Actions", - "id": "//docs/getting-started/integrations/github-actions", - "type": "lvl1", - "url": "/docs/getting-started/integrations/github-actions", - "hierarchy": { "lvl1": "GitHub Actions" } - }, - { - "content": "Basic Usage", - "id": "//docs/getting-started/integrations/github-actions", - "type": "lvl2", - "url": "/docs/getting-started/integrations/github-actions#basic-usage", - "hierarchy": { - "lvl1": "GitHub Actions", - "lvl2": "Basic Usage", - "lvl3": null - } - }, - { - "content": "Using matrices to build multiple targets", - "id": "//docs/getting-started/integrations/github-actions", - "type": "lvl2", - "url": "/docs/getting-started/integrations/github-actions#using-matrices-to-build-multiple-targets", - "hierarchy": { - "lvl1": "GitHub Actions", - "lvl2": "Using matrices to build multiple targets", - "lvl3": null - } - }, - { - "content": "Testing run-to-completion-type unikernels", - "id": "//docs/getting-started/integrations/github-actions", - "type": "lvl2", - "url": "/docs/getting-started/integrations/github-actions#testing-run-to-completion-type-unikernels", - "hierarchy": { - "lvl1": "GitHub Actions", - "lvl2": "Testing run-to-completion-type unikernels", - "lvl3": null - } - }, - { - "content": "Inline-`Kraftfile`", - "id": "//docs/getting-started/integrations/github-actions", - "type": "lvl2", - "url": "/docs/getting-started/integrations/github-actions#inline-kraftfile", - "hierarchy": { - "lvl1": "GitHub Actions", - "lvl2": "Inline-`Kraftfile`", - "lvl3": null - } - }, - { - "content": "Packaging and publishing images", - "id": "//docs/getting-started/integrations/github-actions", - "type": "lvl2", - "url": "/docs/getting-started/integrations/github-actions#packaging-and-publishing-images", - "hierarchy": { - "lvl1": "GitHub Actions", - "lvl2": "Packaging and publishing images", - "lvl3": null - } - }, - { - "content": "Unikraft Plugin for HashiCorp Packer", - "id": "//docs/getting-started/integrations/hcp-packer", - "type": "lvl1", - "url": "/docs/getting-started/integrations/hcp-packer", - "hierarchy": { "lvl1": "Unikraft Plugin for HashiCorp Packer" } - }, - { - "content": "Overview", - "id": "//docs/getting-started/integrations/hcp-packer", - "type": "lvl2", - "url": "/docs/getting-started/integrations/hcp-packer#overview", - "hierarchy": { - "lvl1": "Unikraft Plugin for HashiCorp Packer", - "lvl2": "Overview", - "lvl3": null - } - }, - { - "content": "Installation", - "id": "//docs/getting-started/integrations/hcp-packer", - "type": "lvl2", - "url": "/docs/getting-started/integrations/hcp-packer#installation", - "hierarchy": { - "lvl1": "Unikraft Plugin for HashiCorp Packer", - "lvl2": "Installation", - "lvl3": null - } - }, - { - "content": "Quickstart", - "id": "//docs/getting-started/integrations/hcp-packer", - "type": "lvl3", - "url": "/docs/getting-started/integrations/hcp-packer#quickstart", - "hierarchy": { - "lvl1": "Unikraft Plugin for HashiCorp Packer", - "lvl2": "Installation", - "lvl3": "Quickstart" - } - }, - { - "content": "Using the `packer init` command", - "id": "//docs/getting-started/integrations/hcp-packer", - "type": "lvl3", - "url": "/docs/getting-started/integrations/hcp-packer#using-the-packer-init-command", - "hierarchy": { - "lvl1": "Unikraft Plugin for HashiCorp Packer", - "lvl2": "Quickstart", - "lvl3": "Using the `packer init` command" - } - }, - { - "content": "Manual installation", - "id": "//docs/getting-started/integrations/hcp-packer", - "type": "lvl3", - "url": "/docs/getting-started/integrations/hcp-packer#manual-installation", - "hierarchy": { - "lvl1": "Unikraft Plugin for HashiCorp Packer", - "lvl2": "Using the `packer init` command", - "lvl3": "Manual installation" - } - }, - { - "content": "Configuration", - "id": "//docs/getting-started/integrations/hcp-packer", - "type": "lvl3", - "url": "/docs/getting-started/integrations/hcp-packer#configuration", - "hierarchy": { - "lvl1": "Unikraft Plugin for HashiCorp Packer", - "lvl2": "Manual installation", - "lvl3": "Configuration" - } - }, - { - "content": "Architecture", - "id": "//docs/internals/architecture", - "type": "lvl1", - "url": "/docs/internals/architecture", - "hierarchy": { "lvl1": "Architecture" } - }, - { - "content": "Build Process", - "id": "//docs/internals/build-process", - "type": "lvl1", - "url": "/docs/internals/build-process", - "hierarchy": { "lvl1": "Build Process" } - }, - { - "content": "Unikraft Build Process", - "id": "//docs/internals/build-process", - "type": "lvl2", - "url": "/docs/internals/build-process#unikraft-build-process", - "hierarchy": { - "lvl1": "Build Process", - "lvl2": "Unikraft Build Process", - "lvl3": null - } - }, - { - "content": "Configuring Unikraft", - "id": "//docs/internals/build-process", - "type": "lvl3", - "url": "/docs/internals/build-process#configuring-unikraft", - "hierarchy": { - "lvl1": "Build Process", - "lvl2": "Unikraft Build Process", - "lvl3": "Configuring Unikraft" - } - }, - { - "content": "Makefiles and .config Files", - "id": "//docs/internals/build-process", - "type": "lvl3", - "url": "/docs/internals/build-process#makefiles-and-config-files", - "hierarchy": { - "lvl1": "Build Process", - "lvl2": "Configuring Unikraft", - "lvl3": "Makefiles and .config Files" - } - }, - { - "content": "The Unikraft Core", - "id": "//docs/internals/build-process", - "type": "lvl3", - "url": "/docs/internals/build-process#the-unikraft-core", - "hierarchy": { - "lvl1": "Build Process", - "lvl2": "Makefiles and .config Files", - "lvl3": "The Unikraft Core" - } - }, - { - "content": "Hack Series: Baby Steps", - "id": "//guides/hackathon-baby-steps/", - "type": "lvl1", - "url": "/guides/hackathon-baby-steps/", - "hierarchy": { "lvl1": "Hack Series: Baby Steps" } - }, - { - "content": "Practical Work", - "id": "//guides/hackathon-baby-steps/", - "type": "lvl2", - "url": "/guides/hackathon-baby-steps/#practical-work", - "hierarchy": { - "lvl1": "Hack Series: Baby Steps", - "lvl2": "Practical Work", - "lvl3": null - } - }, - { - "content": "Support Files", - "id": "//guides/hackathon-baby-steps/", - "type": "lvl3", - "url": "/guides/hackathon-baby-steps/#support-files", - "hierarchy": { - "lvl1": "Hack Series: Baby Steps", - "lvl2": "Practical Work", - "lvl3": "Support Files" - } - }, - { - "content": "01. Echo-back Server", - "id": "//guides/hackathon-baby-steps/", - "type": "lvl3", - "url": "/guides/hackathon-baby-steps/#01-echo-back-server", - "hierarchy": { - "lvl1": "Hack Series: Baby Steps", - "lvl2": "Support Files", - "lvl3": "01. Echo-back Server" - } - }, - { - "content": "02. ROT-13", - "id": "//guides/hackathon-baby-steps/", - "type": "lvl3", - "url": "/guides/hackathon-baby-steps/#02-rot-13", - "hierarchy": { - "lvl1": "Hack Series: Baby Steps", - "lvl2": "01. Echo-back Server", - "lvl3": "02. ROT-13" - } - }, - { - "content": "03. Tutorial: Mount 9pfs", - "id": "//guides/hackathon-baby-steps/", - "type": "lvl3", - "url": "/guides/hackathon-baby-steps/#03-tutorial-mount-9pfs", - "hierarchy": { - "lvl1": "Hack Series: Baby Steps", - "lvl2": "02. ROT-13", - "lvl3": "03. Tutorial: Mount 9pfs" - } - }, - { - "content": "04. Store Strings", - "id": "//guides/hackathon-baby-steps/", - "type": "lvl3", - "url": "/guides/hackathon-baby-steps/#04-store-strings", - "hierarchy": { - "lvl1": "Hack Series: Baby Steps", - "lvl2": "03. Tutorial: Mount 9pfs", - "lvl3": "04. Store Strings" - } - }, - { - "content": "Hack Series: Behind the Scenes", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl1", - "url": "/guides/hackathon-behind-scenes/", - "hierarchy": { "lvl1": "Hack Series: Behind the Scenes" } - }, - { - "content": "Overview", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl2", - "url": "/guides/hackathon-behind-scenes/#overview", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Overview", - "lvl3": null - } - }, - { - "content": "01. Virtualization", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#01-virtualization", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Overview", - "lvl3": "01. Virtualization" - } - }, - { - "content": "Virtual Machines", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#virtual-machines", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "01. Virtualization", - "lvl3": null - } - }, - { - "content": "Containers", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#containers", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Virtual Machines", - "lvl3": null - } - }, - { - "content": "Unikraft", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#unikraft", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Containers", - "lvl3": null - } - }, - { - "content": "02. linuxu and KVM", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#02-linuxu-and-kvm", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Unikraft", - "lvl3": "02. linuxu and KVM" - } - }, - { - "content": "03. Unikraft Core", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#03-unikraft-core", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "02. linuxu and KVM", - "lvl3": "03. Unikraft Core" - } - }, - { - "content": "04. libc in Unikraft", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#04-libc-in-unikraft", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "03. Unikraft Core", - "lvl3": "04. libc in Unikraft" - } - }, - { - "content": "05. Configuring Unikraft - Config.uk", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#05-configuring-unikraft---configuk", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "04. libc in Unikraft", - "lvl3": "05. Configuring Unikraft - Config.uk" - } - }, - { - "content": "06. The Build System - basics", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#06-the-build-system---basics", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "05. Configuring Unikraft - Config.uk", - "lvl3": "06. The Build System - basics" - } - }, - { - "content": "07. Running Unikraft", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#07-running-unikraft", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "06. The Build System - basics", - "lvl3": "07. Running Unikraft" - } - }, - { - "content": "Summary", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl2", - "url": "/guides/hackathon-behind-scenes/#summary", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Summary", - "lvl3": null - } - }, - { - "content": "Work Items", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl2", - "url": "/guides/hackathon-behind-scenes/#work-items", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Work Items", - "lvl3": null - } - }, - { - "content": "Support Files", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#support-files", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Work Items", - "lvl3": "Support Files" - } - }, - { - "content": "01. Tutorial / Reminder: Building and Running Unikraft", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#01-tutorial--reminder-building-and-running-unikraft", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Support Files", - "lvl3": "01. Tutorial / Reminder: Building and Running Unikraft" - } - }, - { - "content": "Set Up", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#set-up", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "01. Tutorial / Reminder: Building and Running Unikraft", - "lvl3": null - } - }, - { - "content": "linuxu, x86_64", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#linuxu-x86_64", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Set Up", - "lvl3": null - } - }, - { - "content": "KVM, x86_64", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#kvm-x86_64", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "linuxu, x86_64", - "lvl3": null - } - }, - { - "content": "KVM, ARM", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#kvm-arm", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "KVM, x86_64", - "lvl3": null - } - }, - { - "content": "02. Tutorial: Make It Speak", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#02-tutorial-make-it-speak", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "KVM, ARM", - "lvl3": "02. Tutorial: Make It Speak" - } - }, - { - "content": "KVM, x86_64", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#kvm-x86_64-1", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "02. Tutorial: Make It Speak", - "lvl3": null - } - }, - { - "content": "KVM, ARM", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#kvm-arm-1", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "KVM, x86_64", - "lvl3": null - } - }, - { - "content": "03. More Messages", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#03-more-messages", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "KVM, ARM", - "lvl3": "03. More Messages" - } - }, - { - "content": "04. Going through the Code", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#04-going-through-the-code", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "03. More Messages", - "lvl3": "04. Going through the Code" - } - }, - { - "content": "05. I Have an Important Message", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#05-i-have-an-important-message", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "04. Going through the Code", - "lvl3": "05. I Have an Important Message" - } - }, - { - "content": "06. Tutorial / Reminder: Adding Filesystems to an Application", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#06-tutorial--reminder-adding-filesystems-to-an-application", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "05. I Have an Important Message", - "lvl3": "06. Tutorial / Reminder: Adding Filesystems to an Application" - } - }, - { - "content": "Setup", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#setup", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "06. Tutorial / Reminder: Adding Filesystems to an Application", - "lvl3": null - } - }, - { - "content": "Using the Manual Approach", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#using-the-manual-approach", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Setup", - "lvl3": null - } - }, - { - "content": "07. Tutorial: Give the User a Choice", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#07-tutorial-give-the-user-a-choice", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Using the Manual Approach", - "lvl3": "07. Tutorial: Give the User a Choice" - } - }, - { - "content": "08. Tutorial: Arguments from Command Line", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#08-tutorial-arguments-from-command-line", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "07. Tutorial: Give the User a Choice", - "lvl3": "08. Tutorial: Arguments from Command Line" - } - }, - { - "content": "Running the application", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl4", - "url": "/guides/hackathon-behind-scenes/#running-the-application", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "08. Tutorial: Arguments from Command Line", - "lvl3": null - } - }, - { - "content": "09. Adding a new source file", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#09-adding-a-new-source-file", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "Running the application", - "lvl3": "09. Adding a new source file" - } - }, - { - "content": "10. More Power to the User", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#10-more-power-to-the-user", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "09. Adding a new source file", - "lvl3": "10. More Power to the User" - } - }, - { - "content": "11. Less Power to the User", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#11-less-power-to-the-user", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "10. More Power to the User", - "lvl3": "11. Less Power to the User" - } - }, - { - "content": "12. Give Us Feedback", - "id": "//guides/hackathon-behind-scenes/", - "type": "lvl3", - "url": "/guides/hackathon-behind-scenes/#12-give-us-feedback", - "hierarchy": { - "lvl1": "Hack Series: Behind the Scenes", - "lvl2": "11. Less Power to the User", - "lvl3": "12. Give Us Feedback" - } - }, - { - "content": "Lyon 2022", - "id": "//hackathons/2022-05-lyon/", - "type": "lvl1", - "url": "/hackathons/2022-05-lyon/", - "hierarchy": { "lvl1": "Lyon 2022" } - }, - { - "content": "Hackathon Winners", - "id": "//hackathons/2022-05-lyon/", - "type": "lvl3", - "url": "/hackathons/2022-05-lyon/#hackathon-winners", - "hierarchy": { - "lvl1": "Lyon 2022", - "lvl2": null, - "lvl3": "Hackathon Winners" - } - }, - { - "content": "Registration", - "id": "//hackathons/2022-05-lyon/", - "type": "lvl3", - "url": "/hackathons/2022-05-lyon/#registration", - "hierarchy": { - "lvl1": "Lyon 2022", - "lvl2": "Hackathon Winners", - "lvl3": "Registration" - } - }, - { - "content": "People", - "id": "//hackathons/2022-05-lyon/", - "type": "lvl3", - "url": "/hackathons/2022-05-lyon/#people", - "hierarchy": { - "lvl1": "Lyon 2022", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2022-05-lyon/", - "type": "lvl3", - "url": "/hackathons/2022-05-lyon/#schedule", - "hierarchy": { "lvl1": "Lyon 2022", "lvl2": "People", "lvl3": "Schedule" } - }, - { - "content": "Aachen 2022", - "id": "//hackathons/2022-06-aachen/", - "type": "lvl1", - "url": "/hackathons/2022-06-aachen/", - "hierarchy": { "lvl1": "Aachen 2022" } - }, - { - "content": "Registration", - "id": "//hackathons/2022-06-aachen/", - "type": "lvl3", - "url": "/hackathons/2022-06-aachen/#registration", - "hierarchy": { "lvl1": "Aachen 2022", "lvl2": null, "lvl3": "Registration" } - }, - { - "content": "People", - "id": "//hackathons/2022-06-aachen/", - "type": "lvl3", - "url": "/hackathons/2022-06-aachen/#people", - "hierarchy": { - "lvl1": "Aachen 2022", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2022-06-aachen/", - "type": "lvl3", - "url": "/hackathons/2022-06-aachen/#schedule", - "hierarchy": { "lvl1": "Aachen 2022", "lvl2": "People", "lvl3": "Schedule" } - }, - { - "content": "Munich 2022", - "id": "//hackathons/2022-10-munich/", - "type": "lvl1", - "url": "/hackathons/2022-10-munich/", - "hierarchy": { "lvl1": "Munich 2022" } - }, - { - "content": "Registration", - "id": "//hackathons/2022-10-munich/", - "type": "lvl3", - "url": "/hackathons/2022-10-munich/#registration", - "hierarchy": { "lvl1": "Munich 2022", "lvl2": null, "lvl3": "Registration" } - }, - { - "content": "People", - "id": "//hackathons/2022-10-munich/", - "type": "lvl3", - "url": "/hackathons/2022-10-munich/#people", - "hierarchy": { - "lvl1": "Munich 2022", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2022-10-munich/", - "type": "lvl3", - "url": "/hackathons/2022-10-munich/#schedule", - "hierarchy": { "lvl1": "Munich 2022", "lvl2": "People", "lvl3": "Schedule" } - }, - { - "content": "Saturday, October 22, 2022", - "id": "//hackathons/2022-10-munich/", - "type": "lvl4", - "url": "/hackathons/2022-10-munich/#saturday-october-22-2022", - "hierarchy": { "lvl1": "Munich 2022", "lvl2": "Schedule", "lvl3": null } - }, - { - "content": "Sunday, October 23, 2022", - "id": "//hackathons/2022-10-munich/", - "type": "lvl4", - "url": "/hackathons/2022-10-munich/#sunday-october-23-2022", - "hierarchy": { - "lvl1": "Munich 2022", - "lvl2": "Saturday, October 22, 2022", - "lvl3": null - } - }, - { - "content": "Athens 2023", - "id": "//hackathons/2023-03-athens/", - "type": "lvl1", - "url": "/hackathons/2023-03-athens/", - "hierarchy": { "lvl1": "Athens 2023" } - }, - { - "content": "Registration", - "id": "//hackathons/2023-03-athens/", - "type": "lvl3", - "url": "/hackathons/2023-03-athens/#registration", - "hierarchy": { "lvl1": "Athens 2023", "lvl2": null, "lvl3": "Registration" } - }, - { - "content": "People", - "id": "//hackathons/2023-03-athens/", - "type": "lvl3", - "url": "/hackathons/2023-03-athens/#people", - "hierarchy": { - "lvl1": "Athens 2023", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2023-03-athens/", - "type": "lvl3", - "url": "/hackathons/2023-03-athens/#schedule", - "hierarchy": { "lvl1": "Athens 2023", "lvl2": "People", "lvl3": "Schedule" } - }, - { - "content": "Thursday, March 30, 2023", - "id": "//hackathons/2023-03-athens/", - "type": "lvl4", - "url": "/hackathons/2023-03-athens/#thursday-march-30-2023", - "hierarchy": { "lvl1": "Athens 2023", "lvl2": "Schedule", "lvl3": null } - }, - { - "content": "Friday, March 31, 2023", - "id": "//hackathons/2023-03-athens/", - "type": "lvl4", - "url": "/hackathons/2023-03-athens/#friday-march-31-2023", - "hierarchy": { - "lvl1": "Athens 2023", - "lvl2": "Thursday, March 30, 2023", - "lvl3": null - } - }, - { - "content": "Amsterdam 2023", - "id": "//hackathons/2023-04-amsterdam/", - "type": "lvl1", - "url": "/hackathons/2023-04-amsterdam/", - "hierarchy": { "lvl1": "Amsterdam 2023" } - }, - { - "content": "Registration", - "id": "//hackathons/2023-04-amsterdam/", - "type": "lvl3", - "url": "/hackathons/2023-04-amsterdam/#registration", - "hierarchy": { - "lvl1": "Amsterdam 2023", - "lvl2": null, - "lvl3": "Registration" - } - }, - { - "content": "People", - "id": "//hackathons/2023-04-amsterdam/", - "type": "lvl3", - "url": "/hackathons/2023-04-amsterdam/#people", - "hierarchy": { - "lvl1": "Amsterdam 2023", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2023-04-amsterdam/", - "type": "lvl3", - "url": "/hackathons/2023-04-amsterdam/#schedule", - "hierarchy": { - "lvl1": "Amsterdam 2023", - "lvl2": "People", - "lvl3": "Schedule" - } - }, - { - "content": "Saturday, April 15, 2023", - "id": "//hackathons/2023-04-amsterdam/", - "type": "lvl4", - "url": "/hackathons/2023-04-amsterdam/#saturday-april-15-2023", - "hierarchy": { "lvl1": "Amsterdam 2023", "lvl2": "Schedule", "lvl3": null } - }, - { - "content": "Sunday, April 16, 2023", - "id": "//hackathons/2023-04-amsterdam/", - "type": "lvl4", - "url": "/hackathons/2023-04-amsterdam/#sunday-april-16-2023", - "hierarchy": { - "lvl1": "Amsterdam 2023", - "lvl2": "Saturday, April 15, 2023", - "lvl3": null - } - }, - { - "content": "Porto 2023", - "id": "//hackathons/2023-05-porto/", - "type": "lvl1", - "url": "/hackathons/2023-05-porto/", - "hierarchy": { "lvl1": "Porto 2023" } - }, - { - "content": "Registration", - "id": "//hackathons/2023-05-porto/", - "type": "lvl3", - "url": "/hackathons/2023-05-porto/#registration", - "hierarchy": { "lvl1": "Porto 2023", "lvl2": null, "lvl3": "Registration" } - }, - { - "content": "People", - "id": "//hackathons/2023-05-porto/", - "type": "lvl3", - "url": "/hackathons/2023-05-porto/#people", - "hierarchy": { - "lvl1": "Porto 2023", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2023-05-porto/", - "type": "lvl3", - "url": "/hackathons/2023-05-porto/#schedule", - "hierarchy": { "lvl1": "Porto 2023", "lvl2": "People", "lvl3": "Schedule" } - }, - { - "content": "Wednesday, May 10, 2023", - "id": "//hackathons/2023-05-porto/", - "type": "lvl4", - "url": "/hackathons/2023-05-porto/#wednesday-may-10-2023", - "hierarchy": { "lvl1": "Porto 2023", "lvl2": "Schedule", "lvl3": null } - }, - { - "content": "Thursday, May 11, 2023", - "id": "//hackathons/2023-05-porto/", - "type": "lvl4", - "url": "/hackathons/2023-05-porto/#thursday-may-11-2023", - "hierarchy": { - "lvl1": "Porto 2023", - "lvl2": "Wednesday, May 10, 2023", - "lvl3": null - } - }, - { - "content": "Aveiro 2023", - "id": "//hackathons/2023-09-aveiro/", - "type": "lvl1", - "url": "/hackathons/2023-09-aveiro/", - "hierarchy": { "lvl1": "Aveiro 2023" } - }, - { - "content": "Registration", - "id": "//hackathons/2023-09-aveiro/", - "type": "lvl3", - "url": "/hackathons/2023-09-aveiro/#registration", - "hierarchy": { "lvl1": "Aveiro 2023", "lvl2": null, "lvl3": "Registration" } - }, - { - "content": "People", - "id": "//hackathons/2023-09-aveiro/", - "type": "lvl3", - "url": "/hackathons/2023-09-aveiro/#people", - "hierarchy": { - "lvl1": "Aveiro 2023", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2023-09-aveiro/", - "type": "lvl3", - "url": "/hackathons/2023-09-aveiro/#schedule", - "hierarchy": { "lvl1": "Aveiro 2023", "lvl2": "People", "lvl3": "Schedule" } - }, - { - "content": "Friday, September 15, 2023", - "id": "//hackathons/2023-09-aveiro/", - "type": "lvl4", - "url": "/hackathons/2023-09-aveiro/#friday-september-15-2023", - "hierarchy": { "lvl1": "Aveiro 2023", "lvl2": "Schedule", "lvl3": null } - }, - { - "content": "Saturday, September 16, 2023", - "id": "//hackathons/2023-09-aveiro/", - "type": "lvl4", - "url": "/hackathons/2023-09-aveiro/#saturday-september-16-2023", - "hierarchy": { - "lvl1": "Aveiro 2023", - "lvl2": "Friday, September 15, 2023", - "lvl3": null - } - }, - { - "content": "Vancouver 2023", - "id": "//hackathons/2023-09-vancouver/", - "type": "lvl1", - "url": "/hackathons/2023-09-vancouver/", - "hierarchy": { "lvl1": "Vancouver 2023" } - }, - { - "content": "Registration", - "id": "//hackathons/2023-09-vancouver/", - "type": "lvl3", - "url": "/hackathons/2023-09-vancouver/#registration", - "hierarchy": { - "lvl1": "Vancouver 2023", - "lvl2": null, - "lvl3": "Registration" - } - }, - { - "content": "People", - "id": "//hackathons/2023-09-vancouver/", - "type": "lvl3", - "url": "/hackathons/2023-09-vancouver/#people", - "hierarchy": { - "lvl1": "Vancouver 2023", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2023-09-vancouver/", - "type": "lvl3", - "url": "/hackathons/2023-09-vancouver/#schedule", - "hierarchy": { - "lvl1": "Vancouver 2023", - "lvl2": "People", - "lvl3": "Schedule" - } - }, - { - "content": "Saturday, September 23, 2023", - "id": "//hackathons/2023-09-vancouver/", - "type": "lvl4", - "url": "/hackathons/2023-09-vancouver/#saturday-september-23-2023", - "hierarchy": { "lvl1": "Vancouver 2023", "lvl2": "Schedule", "lvl3": null } - }, - { - "content": "Sunday, September 24, 2023", - "id": "//hackathons/2023-09-vancouver/", - "type": "lvl4", - "url": "/hackathons/2023-09-vancouver/#sunday-september-24-2023", - "hierarchy": { - "lvl1": "Vancouver 2023", - "lvl2": "Saturday, September 23, 2023", - "lvl3": null - } - }, - { - "content": "SOSP 2023", - "id": "//hackathons/2023-10-sosp/", - "type": "lvl1", - "url": "/hackathons/2023-10-sosp/", - "hierarchy": { "lvl1": "SOSP 2023" } - }, - { - "content": "Registration", - "id": "//hackathons/2023-10-sosp/", - "type": "lvl3", - "url": "/hackathons/2023-10-sosp/#registration", - "hierarchy": { "lvl1": "SOSP 2023", "lvl2": null, "lvl3": "Registration" } - }, - { - "content": "People", - "id": "//hackathons/2023-10-sosp/", - "type": "lvl3", - "url": "/hackathons/2023-10-sosp/#people", - "hierarchy": { - "lvl1": "SOSP 2023", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/2023-10-sosp/", - "type": "lvl3", - "url": "/hackathons/2023-10-sosp/#schedule", - "hierarchy": { "lvl1": "SOSP 2023", "lvl2": "People", "lvl3": "Schedule" } - }, - { - "content": "Unikraft Summer of Code 2022", - "id": "//hackathons/usoc22/", - "type": "lvl1", - "url": "/hackathons/usoc22/", - "hierarchy": { "lvl1": "Unikraft Summer of Code 2022" } - }, - { - "content": "Registration", - "id": "//hackathons/usoc22/", - "type": "lvl3", - "url": "/hackathons/usoc22/#registration", - "hierarchy": { - "lvl1": "Unikraft Summer of Code 2022", - "lvl2": null, - "lvl3": "Registration" - } - }, - { - "content": "People", - "id": "//hackathons/usoc22/", - "type": "lvl3", - "url": "/hackathons/usoc22/#people", - "hierarchy": { - "lvl1": "Unikraft Summer of Code 2022", - "lvl2": "Registration", - "lvl3": "People" - } - }, - { - "content": "Schedule", - "id": "//hackathons/usoc22/", - "type": "lvl3", - "url": "/hackathons/usoc22/#schedule", - "hierarchy": { - "lvl1": "Unikraft Summer of Code 2022", - "lvl2": "People", - "lvl3": "Schedule" - } - }, - { - "id": "//releases/v0.10.0", - "type": "lvl1", - "url": "/releases/v0.10.0", - "hierarchy": {} - }, - { - "content": "🚀 New Features", - "id": "//releases/v0.10.0", - "type": "lvl3", - "url": "/releases/v0.10.0#🚀-new-features", - "hierarchy": { "lvl2": null, "lvl3": "🚀 New Features" } - }, - { - "content": "🐛 Bug Fixes & Improvements", - "id": "//releases/v0.10.0", - "type": "lvl3", - "url": "/releases/v0.10.0#🐛-bug-fixes--improvements", - "hierarchy": { - "lvl2": "🚀 New Features", - "lvl3": "🐛 Bug Fixes & Improvements" - } - }, - { - "id": "//releases/v0.11.0", - "type": "lvl1", - "url": "/releases/v0.11.0", - "hierarchy": {} - }, - { - "content": "🚀 New Features", - "id": "//releases/v0.11.0", - "type": "lvl3", - "url": "/releases/v0.11.0#🚀-new-features", - "hierarchy": { "lvl2": null, "lvl3": "🚀 New Features" } - }, - { - "content": "🐛 Bug Fixes & Improvements", - "id": "//releases/v0.11.0", - "type": "lvl3", - "url": "/releases/v0.11.0#🐛-bug-fixes--improvements", - "hierarchy": { - "lvl2": "🚀 New Features", - "lvl3": "🐛 Bug Fixes & Improvements" - } - }, - { - "id": "//releases/v0.12.0", - "type": "lvl1", - "url": "/releases/v0.12.0", - "hierarchy": {} - }, - { - "content": "🚀 New Features", - "id": "//releases/v0.12.0", - "type": "lvl3", - "url": "/releases/v0.12.0#🚀-new-features", - "hierarchy": { "lvl2": null, "lvl3": "🚀 New Features" } - }, - { - "content": "🐛 Bug Fixes & Improvements", - "id": "//releases/v0.12.0", - "type": "lvl3", - "url": "/releases/v0.12.0#🐛-bug-fixes--improvements", - "hierarchy": { - "lvl2": "🚀 New Features", - "lvl3": "🐛 Bug Fixes & Improvements" - } - }, - { - "id": "//releases/v0.13.0", - "type": "lvl1", - "url": "/releases/v0.13.0", - "hierarchy": {} - }, - { - "content": "🚀 New Features", - "id": "//releases/v0.13.0", - "type": "lvl2", - "url": "/releases/v0.13.0#🚀-new-features", - "hierarchy": { "lvl2": "🚀 New Features", "lvl3": null } - }, - { - "content": "🐛 Bug Fixes & Improvements", - "id": "//releases/v0.13.0", - "type": "lvl2", - "url": "/releases/v0.13.0#🐛-bug-fixes--improvements", - "hierarchy": { "lvl2": "🐛 Bug Fixes & Improvements", "lvl3": null } - }, - { - "id": "//releases/v0.14.0", - "type": "lvl1", - "url": "/releases/v0.14.0", - "hierarchy": {} - }, - { - "content": "🚀 New Features", - "id": "//releases/v0.14.0", - "type": "lvl3", - "url": "/releases/v0.14.0#🚀-new-features", - "hierarchy": { "lvl2": null, "lvl3": "🚀 New Features" } - }, - { - "content": "🐛 Bug Fixes & Improvements", - "id": "//releases/v0.14.0", - "type": "lvl3", - "url": "/releases/v0.14.0#🐛-bug-fixes--improvements", - "hierarchy": { - "lvl2": "🚀 New Features", - "lvl3": "🐛 Bug Fixes & Improvements" - } - }, - { - "id": "//releases/v0.3.0", - "type": "lvl1", - "url": "/releases/v0.3.0", - "hierarchy": {} - }, - { - "id": "//releases/v0.3.1", - "type": "lvl1", - "url": "/releases/v0.3.1", - "hierarchy": {} - }, - { - "id": "//releases/v0.4.0", - "type": "lvl1", - "url": "/releases/v0.4.0", - "hierarchy": {} - }, - { - "id": "//releases/v0.5.0", - "type": "lvl1", - "url": "/releases/v0.5.0", - "hierarchy": {} - }, - { - "id": "//releases/v0.6.0", - "type": "lvl1", - "url": "/releases/v0.6.0", - "hierarchy": {} - }, - { - "content": "To celebrate Unikraft’s 4-year \"git commit birthday\", we are proud to announce the latest release: v0.6 - Dione.", - "id": "//releases/v0.6.0", - "type": "lvl3", - "url": "/releases/v0.6.0#to-celebrate-unikrafts-4-year-git-commit-birthday-we-are-proud-to-announce-the-latest-release-v06---dione", - "hierarchy": { - "lvl2": null, - "lvl3": "To celebrate Unikraft’s 4-year \"git commit birthday\", we are proud to announce the latest release: v0.6 - Dione." - } - }, - { - "id": "//releases/v0.7.0", - "type": "lvl1", - "url": "/releases/v0.7.0", - "hierarchy": {} - }, - { - "id": "//releases/v0.8.0", - "type": "lvl1", - "url": "/releases/v0.8.0", - "hierarchy": {} - }, - { - "content": "🚀 New Features", - "id": "//releases/v0.8.0", - "type": "lvl3", - "url": "/releases/v0.8.0#🚀-new-features", - "hierarchy": { "lvl2": null, "lvl3": "🚀 New Features" } - }, - { - "content": "🐛 Bug Fixes & Improvements", - "id": "//releases/v0.8.0", - "type": "lvl3", - "url": "/releases/v0.8.0#🐛-bug-fixes--improvements", - "hierarchy": { - "lvl2": "🚀 New Features", - "lvl3": "🐛 Bug Fixes & Improvements" - } - }, - { - "id": "//releases/v0.9.0", - "type": "lvl1", - "url": "/releases/v0.9.0", - "hierarchy": {} - }, - { - "content": "🚀 New Features", - "id": "//releases/v0.9.0", - "type": "lvl3", - "url": "/releases/v0.9.0#🚀-new-features", - "hierarchy": { "lvl2": null, "lvl3": "🚀 New Features" } - }, - { - "content": "🐛 Bug Fixes & Improvements", - "id": "//releases/v0.9.0", - "type": "lvl3", - "url": "/releases/v0.9.0#🐛-bug-fixes--improvements", - "hierarchy": { - "lvl2": "🚀 New Features", - "lvl3": "🐛 Bug Fixes & Improvements" - } - } -] diff --git a/scripts/get-search-meta.ts b/scripts/get-search-meta.ts new file mode 100644 index 00000000..fe4cefd8 --- /dev/null +++ b/scripts/get-search-meta.ts @@ -0,0 +1,120 @@ +import { + fileToPath, + parseMarkdownString, + posixPath, + removePrefix, +} from '@docusaurus/utils' +import fs from 'fs' +import toc from 'markdown-toc' +import path from 'path' +import prettier from 'prettier' +import shell from 'shelljs' + +interface ResultType { + content: string + id: string + url: string + type: 'lvl1' | 'lvl2' | 'lvl3' + hierarchy: { + lvl1: string | null + lvl2?: string | null + lvl3?: string | null + } +} + +interface TOCResultItem { + content: string + slug: string + lvl: 1 | 2 | 3 + i: number + seen: number +} + +const websiteRoot = 'content' + +async function getMDXMeta(file: string) { + // For Windows: convert backslashes to forwards slashes with `posixPath()` for consistency + const filePath = posixPath(file) + const processCWD = posixPath(process.cwd()) + + const markdownString = fs.readFileSync(file).toString() + + const { content, frontMatter: _frontMatter } = await parseMarkdownString( + markdownString, + ) + const frontMatter = _frontMatter as Record + const tableOfContent = toc(content) + const json = tableOfContent.json as TOCResultItem[] + const slug = fileToPath(filePath) + .replace(`/${websiteRoot}`, '') + .replace(processCWD, '') + + const result: ResultType[] = [] + + result.push({ + content: frontMatter.title, + id: slug, + type: 'lvl1', + url: removePrefix(slug, '/'), + hierarchy: { + lvl1: frontMatter.title, + }, + }) + + json.forEach((item, index) => { + result.push({ + content: item.content, + id: slug, + type: `lvl${item.lvl}` as any, + url: removePrefix(slug, '/') + `#${item.slug}`, + hierarchy: { + lvl1: frontMatter.title, + lvl2: item.lvl === 2 ? item.content : json[index - 1]?.content ?? null, + lvl3: item.lvl === 3 ? item.content : null, + }, + }) + }) + + return result +} + +async function getSearchMeta() { + let json: any = [] + + const files = shell + .ls('-R', websiteRoot) + .map((file) => path.join(process.cwd(), websiteRoot, file)) + .filter((file) => file.endsWith('.mdx')) + + /** + * File paths to not be included in the search meta. + * + * This can be overall page sections (i.e. "/docs", "/tutorial", etc.) or specific files. (i.e. "/guides/first-steps") + */ + const excludedSlugs = [] + + for (const file of files) { + let result: any[] = [] + + // Windows OS: ensure file paths have forward slashes. + const fileToPosixPath = posixPath(file) + + const isExcluded = !!excludedSlugs.find((excludedSlug) => + fileToPosixPath.includes(excludedSlug), + ) + + try { + result = isExcluded ? [] : await getMDXMeta(file) + json.push(...result) + } catch (error) { + console.log(error) + } + } + + json = prettier.format(JSON.stringify(json), { parser: 'json' }) + const outPath = path.join(process.cwd(), 'configs', 'search-meta.json') + fs.writeFileSync(outPath, json) + console.log('Search meta is ready ✅') +} + +getSearchMeta()