<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="ETSI SDG OSL Documentation page"> <meta name="author" content="OpenSlice by ETSI"> <link rel="canonical" href="https://osl.etsi.org/develop/contributing/developing/"> <link rel="prev" href="../../architecture/centrallog/"> <link rel="next" href="../documenting/"> <link rel="icon" href="../../images/favicon.png"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.2"> <title>Developing - ETSI SDG OSL Documentation</title> <link rel="stylesheet" href="../../assets/stylesheets/main.d7758b05.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"> <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style> <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link href="../../assets/stylesheets/glightbox.min.css" rel="stylesheet"/><style> html.glightbox-open { overflow: initial; height: 100%; } .gslide-title { margin-top: 0px; user-select: text; } .gslide-desc { color: #666; user-select: text; } .gslide-image img { background: white; } .gscrollbar-fixer { padding-right: 15px; } .gdesc-inner { font-size: 0.75rem; } body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color);} body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color);} body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color);}</style> <script src="../../assets/javascripts/glightbox.min.js"></script></head> <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="cyan" data-md-color-accent="blue"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#developing" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <div data-md-color-scheme="default" data-md-component="outdated" hidden> </div> <header class="md-header md-header--shadow" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="Header"> <a href="../.." title="ETSI SDG OSL Documentation" class="md-header__button md-logo" aria-label="ETSI SDG OSL Documentation" data-md-component="logo"> <img src="../../images/logo_osl.png" alt="logo"> </a> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <span class="md-ellipsis"> ETSI SDG OSL Documentation </span> </div> <div class="md-header__topic" data-md-component="header-topic"> <span class="md-ellipsis"> Developing </span> </div> </div> </div> <div class="md-header__source"> <a href="https://labs.etsi.org/rep/osl" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81s-5.7.083-8.4 1.11c-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.1 18.1 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3s9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82"/></svg> </div> <div class="md-source__repository"> OSL GitLab </div> </a> </div> </nav> </header> <div class="md-container" data-md-component="container"> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href="../.." title="ETSI SDG OSL Documentation" class="md-nav__button md-logo" aria-label="ETSI SDG OSL Documentation" data-md-component="logo"> <img src="../../images/logo_osl.png" alt="logo"> </a> ETSI SDG OSL Documentation </label> <div class="md-nav__source"> <a href="https://labs.etsi.org/rep/osl" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81s-5.7.083-8.4 1.11c-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.1 18.1 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3s9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82"/></svg> </div> <div class="md-source__repository"> OSL GitLab </div> </a> </div> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" > <label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0"> <span class="md-ellipsis"> Overview </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_1"> <span class="md-nav__icon md-icon"></span> Overview </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../.." class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../deployment_examples/" class="md-nav__link"> <span class="md-ellipsis"> Deployment examples </span> </a> </li> <li class="md-nav__item"> <a href="../../history/" class="md-nav__link"> <span class="md-ellipsis"> History </span> </a> </li> <li class="md-nav__item"> <a href="../../etsi_osl/" class="md-nav__link"> <span class="md-ellipsis"> OpenSlice under ETSI </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-ellipsis"> Getting Started </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Getting Started </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1" > <label class="md-nav__link" for="__nav_2_1" id="__nav_2_1_label" tabindex="0"> <span class="md-ellipsis"> Deployment </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_1_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_1"> <span class="md-nav__icon md-icon"></span> Deployment </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../getting_started/deployment/introduction/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../getting_started/deployment/docker_compose/" class="md-nav__link"> <span class="md-ellipsis"> Docker Compose </span> </a> </li> <li class="md-nav__item"> <a href="../../getting_started/deployment/kubernetes/" class="md-nav__link"> <span class="md-ellipsis"> Kubernetes </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../getting_started/portals/" class="md-nav__link"> <span class="md-ellipsis"> Portals </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3" > <label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0"> <span class="md-ellipsis"> Configuration/Management </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_3"> <span class="md-nav__icon md-icon"></span> Configuration/Management </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../getting_started/configuration/config_intro/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../getting_started/configuration/role_keycloak_management/" class="md-nav__link"> <span class="md-ellipsis"> Role/Keycloak management </span> </a> </li> <li class="md-nav__item"> <a href="../../getting_started/configuration/nfvo_config/" class="md-nav__link"> <span class="md-ellipsis"> NFV Orchestrator Configuration </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4" > <label class="md-nav__link" for="__nav_2_3_4" id="__nav_2_3_4_label" tabindex="0"> <span class="md-ellipsis"> Advanced topics </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_3_4"> <span class="md-nav__icon md-icon"></span> Advanced topics </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../getting_started/configuration/consuming_services_from_external_partners/" class="md-nav__link"> <span class="md-ellipsis"> Consuming Services From External OSS </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0"> <span class="md-ellipsis"> NaaS </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> NaaS </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../naas/introduction/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" > <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0"> <span class="md-ellipsis"> Services </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_2"> <span class="md-nav__icon md-icon"></span> Services </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../naas/service_catalog/" class="md-nav__link"> <span class="md-ellipsis"> Service Catalogs </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/service_spec/" class="md-nav__link"> <span class="md-ellipsis"> Service Specification </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/service_ordering/" class="md-nav__link"> <span class="md-ellipsis"> Service Ordering </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/service_inventory/" class="md-nav__link"> <span class="md-ellipsis"> Service Inventory </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/gst_to_tmf/" class="md-nav__link"> <span class="md-ellipsis"> GSMA GST to TMF Service </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" > <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0"> <span class="md-ellipsis"> Resources </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3"> <span class="md-nav__icon md-icon"></span> Resources </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../naas/resource_catalog/" class="md-nav__link"> <span class="md-ellipsis"> Resources Catalogs </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/resource_spec/" class="md-nav__link"> <span class="md-ellipsis"> Resources Specification </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/resource_inventory/" class="md-nav__link"> <span class="md-ellipsis"> Resources Inventory </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4" > <label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="0"> <span class="md-ellipsis"> Service orchestration </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_4"> <span class="md-nav__icon md-icon"></span> Service orchestration </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../naas/so_intro/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/lcm_intro/" class="md-nav__link"> <span class="md-ellipsis"> Service Lifecycle management </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/lcm_rules_intro/" class="md-nav__link"> <span class="md-ellipsis"> LCM Rules Introduction </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_4" > <label class="md-nav__link" for="__nav_3_4_4" id="__nav_3_4_4_label" tabindex="0"> <span class="md-ellipsis"> From Service order to services/resources </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_4_4"> <span class="md-nav__icon md-icon"></span> From Service order to services/resources </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../naas/so_servicespec_to_services_kubernetes/" class="md-nav__link"> <span class="md-ellipsis"> Exposing Kubernetes services </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/so_servicespec_to_services_nfv/" class="md-nav__link"> <span class="md-ellipsis"> Exposing NFV Services </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../naas/exposed_apis/" class="md-nav__link"> <span class="md-ellipsis"> Supported TMFORUM exposed APIs </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_6" > <label class="md-nav__link" for="__nav_3_6" id="__nav_3_6_label" tabindex="0"> <span class="md-ellipsis"> NFV support </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_6"> <span class="md-nav__icon md-icon"></span> NFV support </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../naas/nfv/intro/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../naas/nfv/nfvservices/" class="md-nav__link"> <span class="md-ellipsis"> NFV Services </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-ellipsis"> Service design </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> Service design </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../service_design/intro/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../service_design/catalogs/" class="md-nav__link"> <span class="md-ellipsis"> Catalogs </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" > <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0"> <span class="md-ellipsis"> Support for Kubernetes </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_3"> <span class="md-nav__icon md-icon"></span> Support for Kubernetes </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../service_design/kubernetes/intro/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../service_design/kubernetes/exposing_kubernetes_resources/" class="md-nav__link"> <span class="md-ellipsis"> Exposing Kubernetes Resources </span> </a> </li> <li class="md-nav__item"> <a href="../../service_design/kubernetes/design_helm_aas/" class="md-nav__link"> <span class="md-ellipsis"> Design Helm as a Service </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" > <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0"> <span class="md-ellipsis"> Support for NFV </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_4"> <span class="md-nav__icon md-icon"></span> Support for NFV </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../service_design/nfv/design_nfv_services/" class="md-nav__link"> <span class="md-ellipsis"> Design NFV Services </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_5" > <label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0"> <span class="md-ellipsis"> LCM Rules </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_5"> <span class="md-nav__icon md-icon"></span> LCM Rules </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../service_design/lcmrules/intro/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../service_design/lcmrules/specification/" class="md-nav__link"> <span class="md-ellipsis"> Specification </span> </a> </li> <li class="md-nav__item"> <a href="../../service_design/lcmrules/examples/" class="md-nav__link"> <span class="md-ellipsis"> Typical Examples </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_6" > <label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="0"> <span class="md-ellipsis"> Examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_6"> <span class="md-nav__icon md-icon"></span> Examples </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../service_design/examples/intro/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../service_design/examples/calculator_crd_aas/calculator_crd_aas/" class="md-nav__link"> <span class="md-ellipsis"> Calculator CRD aaS </span> </a> </li> <li class="md-nav__item"> <a href="../../service_design/examples/jenkins_helm_install_aas/jenkins_helm_install_aas/" class="md-nav__link"> <span class="md-ellipsis"> Jenkins Helm Installation aaS </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0"> <span class="md-ellipsis"> Service Ordering </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Service Ordering </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../service_ordering/ordering_services/" class="md-nav__link"> <span class="md-ellipsis"> Ordering Services from catalogs </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" > <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0"> <span class="md-ellipsis"> Addons </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6"> <span class="md-nav__icon md-icon"></span> Addons </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../addons/intro/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_2" > <label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0"> <span class="md-ellipsis"> CAMARA </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6_2"> <span class="md-nav__icon md-icon"></span> CAMARA </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../addons/camara/intro/" class="md-nav__link"> <span class="md-ellipsis"> Offering CAMARAaaS </span> </a> </li> <li class="md-nav__item"> <a href="../../addons/camara/qod/" class="md-nav__link"> <span class="md-ellipsis"> Quality on Demand </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0"> <span class="md-ellipsis"> Design & Architecture </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> Design & Architecture </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../architecture/architecture/" class="md-nav__link"> <span class="md-ellipsis"> Architecture </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/cridge/cridge_introduction/" class="md-nav__link"> <span class="md-ellipsis"> CRIDGE </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/messagebus/" class="md-nav__link"> <span class="md-ellipsis"> Message bus </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/osom/" class="md-nav__link"> <span class="md-ellipsis"> OSOM </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/oauth/" class="md-nav__link"> <span class="md-ellipsis"> Authentication </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_6" > <label class="md-nav__link" for="__nav_7_6" id="__nav_7_6_label" tabindex="0"> <span class="md-ellipsis"> APIs </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7_6"> <span class="md-nav__icon md-icon"></span> APIs </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../architecture/tmfapi/" class="md-nav__link"> <span class="md-ellipsis"> TMF API </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/nfvapi/" class="md-nav__link"> <span class="md-ellipsis"> NFV API </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../architecture/issuemgt/" class="md-nav__link"> <span class="md-ellipsis"> Issue management </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/centrallog/" class="md-nav__link"> <span class="md-ellipsis"> Central logging </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" checked> <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0"> <span class="md-ellipsis"> Contributing to OSL </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_8"> <span class="md-nav__icon md-icon"></span> Contributing to OSL </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> Developing </span> <span class="md-nav__icon md-icon"></span> </label> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Developing </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#general-requirements" class="md-nav__link"> <span class="md-ellipsis"> General requirements </span> </a> </li> <li class="md-nav__item"> <a href="#versionrelease-management" class="md-nav__link"> <span class="md-ellipsis"> Version/release management </span> </a> </li> <li class="md-nav__item"> <a href="#getting-started" class="md-nav__link"> <span class="md-ellipsis"> Getting Started </span> </a> </li> <li class="md-nav__item"> <a href="#contribute-to-a-subsystem" class="md-nav__link"> <span class="md-ellipsis"> Contribute to a subsystem </span> </a> </li> <li class="md-nav__item"> <a href="#examples-of-developing-on-specific-subsystems" class="md-nav__link"> <span class="md-ellipsis"> Examples of developing on specific subsystems </span> </a> <nav class="md-nav" aria-label="Examples of developing on specific subsystems"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#vnfnsd-catalog-management-and-nsd-deployment-api-service" class="md-nav__link"> <span class="md-ellipsis"> VNF/NSD Catalog Management and NSD Deployment API service </span> </a> </li> <li class="md-nav__item"> <a href="#vnfnsd-catalog-management-and-nsd-deployment-web-ui-service" class="md-nav__link"> <span class="md-ellipsis"> VNF/NSD Catalog Management and NSD Deployment WEB UI service </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#reach-us" class="md-nav__link"> <span class="md-ellipsis"> Reach us </span> </a> <nav class="md-nav" aria-label="Reach us"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#slack" class="md-nav__link"> <span class="md-ellipsis"> Slack </span> </a> </li> <li class="md-nav__item"> <a href="#e-mail" class="md-nav__link"> <span class="md-ellipsis"> E-mail </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#wishlist" class="md-nav__link"> <span class="md-ellipsis"> Wishlist </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../documenting/" class="md-nav__link"> <span class="md-ellipsis"> Documenting </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../terminology/" class="md-nav__link"> <span class="md-ellipsis"> Terminology </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#general-requirements" class="md-nav__link"> <span class="md-ellipsis"> General requirements </span> </a> </li> <li class="md-nav__item"> <a href="#versionrelease-management" class="md-nav__link"> <span class="md-ellipsis"> Version/release management </span> </a> </li> <li class="md-nav__item"> <a href="#getting-started" class="md-nav__link"> <span class="md-ellipsis"> Getting Started </span> </a> </li> <li class="md-nav__item"> <a href="#contribute-to-a-subsystem" class="md-nav__link"> <span class="md-ellipsis"> Contribute to a subsystem </span> </a> </li> <li class="md-nav__item"> <a href="#examples-of-developing-on-specific-subsystems" class="md-nav__link"> <span class="md-ellipsis"> Examples of developing on specific subsystems </span> </a> <nav class="md-nav" aria-label="Examples of developing on specific subsystems"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#vnfnsd-catalog-management-and-nsd-deployment-api-service" class="md-nav__link"> <span class="md-ellipsis"> VNF/NSD Catalog Management and NSD Deployment API service </span> </a> </li> <li class="md-nav__item"> <a href="#vnfnsd-catalog-management-and-nsd-deployment-web-ui-service" class="md-nav__link"> <span class="md-ellipsis"> VNF/NSD Catalog Management and NSD Deployment WEB UI service </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#reach-us" class="md-nav__link"> <span class="md-ellipsis"> Reach us </span> </a> <nav class="md-nav" aria-label="Reach us"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#slack" class="md-nav__link"> <span class="md-ellipsis"> Slack </span> </a> </li> <li class="md-nav__item"> <a href="#e-mail" class="md-nav__link"> <span class="md-ellipsis"> E-mail </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#wishlist" class="md-nav__link"> <span class="md-ellipsis"> Wishlist </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <h1 id="developing">Developing</h1> <p>OpenSlice backend services are mainly implemented with Java 17 or above and Spring Boot.</p> <p>OpenSlice uses various subsystems and depending on the module would you like to work, other subsystems must be present <em>(you can disable them though in the code, e.g. at docker-compose.yaml file)</em>. </p> <h2 id="general-requirements">General requirements</h2> <ul> <li>Docker should be installed in your development environment</li> <li>Run the core subsystems (see <a href="#contribute-to-a-subsystem">related</a> section)</li> </ul> <h2 id="versionrelease-management">Version/release management</h2> <p>Check <a href="https://nvie.com/posts/a-successful-git-branching-model/">this</a> nice article on how we develop and release versions.</p> <p>We develop in the <code>develop</code> branch and follow a issue driven development model.</p> <h2 id="getting-started">Getting Started</h2> <p>To get the latest development branch, execute:</p> <div class="language-bash highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>wget<span class="w"> </span>https://labs.etsi.org/rep/osl/code/org.etsi.osl.main/-/raw/develop/compose/deploy.sh<span class="w"> </span> </span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>sudo<span class="w"> </span>./deploy.sh<span class="w"> </span>develop<span class="w"> </span><span class="c1">#[or replace develop with another branch name]</span> </span></code></pre></div> <p>You may follow the <a href="https://osl.etsi.org/documentation/develop/deployment/">installation process</a>, as described at <code>develop</code> tagged documentation.</p> <h2 id="contribute-to-a-subsystem">Contribute to a subsystem</h2> <p>To work on a specific subsystem e.g. <code>org.etsi.osl.tmf.api</code>, you must:</p> <ol> <li> <p>Deploy only the core necessary subsystems through:</p> <div class="language-bash highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>sudo<span class="w"> </span>docker<span class="w"> </span>compose<span class="w"> </span>--profile<span class="w"> </span>dev<span class="w"> </span>down<span class="p">;</span>sudo<span class="w"> </span>docker<span class="w"> </span>compose<span class="w"> </span>--profile<span class="w"> </span>dev<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>--build </span></code></pre></div> <blockquote> <p>Note <strong>--profile dev</strong> that will only deploy the core dependency subsystems, instead of the whole OpenSlice.</p> </blockquote> <p><em>OR</em></p> <p>Alternatively, comment out the respective container from the <code>docker-compose.yaml</code> file, so as to deploy the whole OpenSlice, except the subsystem you want to work on, following the provided installation steps.</p> </li> <li> <p>Clone the respective repository, for example: <a href="https://labs.etsi.org/rep/osl/code/org.etsi.osl.tmf.api/-/tree/develop">https://labs.etsi.org/rep/osl/code/org.etsi.osl.tmf.api/-/tree/develop</a> (the clone URLs are available at this link)</p> </li> <li> <p>Code! 😊</p> </li> </ol> <h2 id="examples-of-developing-on-specific-subsystems">Examples of developing on specific subsystems</h2> <h3 id="vnfnsd-catalog-management-and-nsd-deployment-api-service">VNF/NSD Catalog Management and NSD Deployment API service</h3> <p>You need to:</p> <ol> <li> <p>Clone the repository: <code>https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.api/-/tree/develop</code></p> </li> <li> <p>Check the docker-compose.yml file. Default port is 13080. Check specifically the datasource username/password, server port.</p> </li> <li> <p>Make sure that the core subsystems are up and running.</p> <p>Execute it with: <div class="language-bash highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>mvn<span class="w"> </span>spring-boot:run </span></code></pre></div></p> </li> </ol> <blockquote> <p>For verification, Swagger API of the service is at <code>http://localhost:13000/osapi/swagger-ui/index.html</code>. There, you may try there various REST actions and authenticate via the OAuth server without the use of the UI.</p> </blockquote> <h3 id="vnfnsd-catalog-management-and-nsd-deployment-web-ui-service">VNF/NSD Catalog Management and NSD Deployment WEB UI service</h3> <p>The Web UI is written in <code>AngularJS</code>. To run it:</p> <ol> <li> <p>Clone the repository: <a href="https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.web/-/tree/develop">https://labs.etsi.org/rep/osl/code/org.etsi.osl.portal.web/-/tree/develop</a> (the clone URLs are available at that link)</p> <blockquote> <p>By default the project <code>org.etsi.osl.portal.api</code> exposes the folder <code>../org.etsi.osl.portal.web/src/</code> in a folder testweb (check class <code>MvcConfig.java</code> in <code>org.etsi.osl.portal.api</code>) for development. (In production <em>nginx</em> is used)</p> </blockquote> </li> <li> <p>Point your browser to <code>http://localhost:13000/osapi/testweb/index.html/</code></p> </li> </ol> <h2 id="reach-us">Reach us</h2> <p>We are available on different channels.</p> <h3 id="slack">Slack</h3> <p>Feel free to join OpenSlice's <a href="https://openslice.slack.com">Slack</a> workspace for any development oriented questions <em>(preferred)</em>.</p> <h3 id="e-mail">E-mail</h3> <p>If you are a member or a participant, you can also reach out on the <code>OSL_TECH</code> mailing list.</p> <p>For administrative support, contact <code>SDGsupport@etsi.org</code>.</p> <hr /> <h2 id="wishlist">Wishlist</h2> <p>Check also our wishlist of new features. You can add your own.</p> <p>See <a href="../wishlist/">wishlist</a>.</p> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer" > <a href="../../architecture/centrallog/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Central logging"> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class="md-footer__title"> <span class="md-footer__direction"> Previous </span> <div class="md-ellipsis"> Central logging </div> </div> </a> <a href="../documenting/" class="md-footer__link md-footer__link--next" aria-label="Next: Documenting"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> Documenting </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Copyright © 2025 ETSI OSL </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> </div> <div class="md-social"> <a href="https://osl.etsi.org/" target="_blank" rel="noopener" title="osl.etsi.org" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M352 256c0 22.2-1.2 43.6-3.3 64H163.4c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64h185.3c2.2 20.4 3.3 41.8 3.3 64m28.8-64h123.1c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64m112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6 78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7 10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5 11.6 26 20.9 58.2 27 94.7m-209 0H18.6c30-74.1 93.6-130.9 172-151.6-25.5 34.2-45.3 87.7-55.3 151.6M8.1 192h123.1c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64m186.6 254.6c-11.6-26-20.9-58.2-27-94.6h176.6c-6.1 36.4-15.5 68.6-27 94.6-10.5 23.6-22.2 40.7-33.5 51.5-11.2 10.7-20.5 13.9-27.8 13.9s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6-78.4-20.7-142-77.5-172-151.6zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6 25.5-34.2 45.2-87.7 55.3-151.6h116.7z"/></svg> </a> <a href="https://labs.etsi.org/rep/osl" target="_blank" rel="noopener" title="labs.etsi.org" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81s-5.7.083-8.4 1.11c-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.1 18.1 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3s9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82"/></svg> </a> <a href="https://www.linkedin.com/company/openslice/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg> </a> <a href="https://twitter.com/OpensliceOSS" target="_blank" rel="noopener" title="twitter.com" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <div class="md-progress" data-md-component="progress" role="progressbar"></div> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.instant", "navigation.instant.progress", "navigation.top", "navigation.footer", "navigation.path", "search", "search.highlight", "content.code.copy"], "search": "../../assets/javascripts/workers/search.f8cc74c7.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script> <script src="../../assets/javascripts/bundle.f13b1293.min.js"></script> <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"}); document$.subscribe(() => { lightbox.reload() }); </script></body> </html>