| <!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><script>(function(){const t=localStorage.getItem("theme");t==="dark"?document.documentElement.classList.add("dark-mode"):t==="light"&&document.documentElement.classList.remove("dark-mode");const n=document.documentElement.classList.contains("dark-mode"),e=document.getElementById("theme-icon");e&&(e.classList&&e.classList.toggle("fa-sun",!n),e.classList&&e.classList.toggle("fa-moon",n))})()</script><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=text/html href=/docs/reference/references/actions-new/_print/><link rel=alternate type=application/rss+xml href=/docs/reference/references/actions-new/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/favicons/android-96x96.png sizes=96x96><link rel=icon type=image/png href=/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/favicons/android-192x192.png sizes=192x192><title>Runtimes under the hood | Apache OpenServerless™</title> |
| <meta name=description content="How to add new languages to your system"><meta property="og:url" content="/docs/reference/references/actions-new/"><meta property="og:site_name" content="Apache OpenServerless™"><meta property="og:title" content="Runtimes under the hood"><meta property="og:description" content="How to add new languages to your system"><meta property="og:locale" content="en"><meta property="og:type" content="website"><meta itemprop=name content="Runtimes under the hood"><meta itemprop=description content="How to add new languages to your system"><meta itemprop=dateModified content="2025-08-01T16:51:57+02:00"><meta itemprop=wordCount content="1841"><meta name=twitter:card content="summary"><meta name=twitter:title content="Runtimes under the hood"><meta name=twitter:description content="How to add new languages to your system"><link rel=preload href=/scss/main.min.63d3665407fbf8c19373c7376d20ae27b458d1c085cc6645b75d65bbf044b537.css as=style><link href=/scss/main.min.63d3665407fbf8c19373c7376d20ae27b458d1c085cc6645b75d65bbf044b537.css rel=stylesheet integrity><script src=/js/jquery-3.7.1.min.js></script><script defer src=/js/lunr-2.3.9.min.js></script><link rel=stylesheet href=/css/prism.css></head><body class=td-section><header><nav class="td-navbar js-navbar-scroll" data-bs-theme=dark><div class="container-fluid flex-column flex-md-row"><a class=navbar-brand href=/><span class="navbar-brand__logo navbar-logo"><svg viewBox="0 0 1024 781"><g stroke-width="2" fill="none" stroke-linecap="butt"><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M438.8 120.98Q435.57 121.88 434.78 122.21 431.12 123.7 423.21 127.52"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M423.21 127.52C416.56 130.57 409.18 133.39 403.28 136.68Q394.42 141.62 387.66 147.15 379.83 153.54 367.83 164.27C360.8 170.55 354.15 177.8 347.45 184.72"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M347.45 184.72 342.5 189.88Q342.21 190.18 341.84 190.38 341.07 190.8 341.03 191.71 341.01 192.11 340.65 191.92 340.53 191.86 340.4 191.9 339.91 192.07 339.71 192.6 339.03 194.41 337.73 195.89 337.39 196.28 337.81 195.97 337.86 195.93 337.92 195.9 338.54 195.6 338.12 196.15 335.04 200.12 332.21 203.99 332.03 204.23 331.79 204.04L331.46 203.78Q331.41 203.74 331.44 203.69 332.29 202.33 333.12 201.24 333.2 201.13 333.11 201 333.07 200.95 333.03 201 332.05 202.53 330.7 203.79 330.54 203.94 330.75 203.87 330.79 203.85 330.84 203.87 331.05 203.97 331.06 204.2 331.13 205.63 329.99 206.5A1.85 1.78 81.9 00329.4 207.32Q329.06 208.29 328.39 209.14 328.09 209.52 327.61 209.58 325.89 209.82 326 211.78A1.3 1.27-28 01325.72 212.66Q324.07 214.8 323.12 217.7"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M323.12 217.7 318.02 228.46"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M318.02 228.46Q313.27 234.86 311.76 237.75 309.37 242.33 305.99 252.05 304.46 256.44 305.93 254.25"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M305.93 254.25Q305.62 255.63 304.89 256.82 304.77 257.01 304.97 257.12L305.2 257.24Q305.23 257.26 305.24 257.22 306.13 255.05 307.26 252.78 307.34 252.62 307.51 252.71L307.73 252.82Q307.75 252.84 307.74 252.86 306.25 255.22 305.41 257.9 304.19 261.82 302.64 265.97 302.35 266.75 301.89 267.38C300.98 268.59 301.07 270.27 300.39 271.68Q299.06 274.47 298.36 277.53 298.26 277.97 297.92 278.28 297.32 278.84 297.16 279.76 296.53 283.42 295.29 287.79C294.38 290.99 294.69 294.16 293.83 297.36 292.99 300.5 293.12 303.75 292.59 306.9Q290.82 317.42 290.83 332.15C290.83 348.21 291.88 362.54 296.59 377.96Q298.48 384.15 300.49 390.37 301.18 392.52 299.65 390.86 298.11 389.19 295.54 387.72 290.29 384.72 285.05 381.84"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M285.05 381.84Q283.43 380.56 281.9 380.1C279.89 379.5 278.26 378.64 276.39 378.23 274.28 377.77 271.98 376.83 270.21 376.37Q255.65 372.58 240.43 373.13"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M240.43 373.13Q233.74 372.8 227 373.57 218.25 374.57 209.52 375.73 205.54 376.26 202.03 377.1 198.41 377.96 194.65 378.96 194.3 379.05 194.13 379.39A.74.72-79.5 01193.55 379.8Q189.92 380.15 187.2 381.49 184.73 382.71 182.18 383.81 179.39 385.01 177.01 386.52q-10.2 6.5-21.71 15.23-11.53 8.75-19.24 19.06C135.77 421.2 135.78 421.58 135.55 421.95Q132.47 426.87 128.69 431.08 125.96 434.1 123.91 437.19 121.72 440.47 119.57 443.8 119.26 444.28 119.09 444.83 118.95 445.24 118.63 445.53 116.84 447.17 116 449.6A1.7 1.69 80.4 01115.47 450.35Q115.1 450.66 114.87 451.08 111.96 456.46 110.57 460.85 109.15 465.35 107.7 469.25 104.74 477.22 102.44 485.43 102.33 485.83 102.71 485.65 103.01 485.5 102.86 485.13 102.81 485.01 102.88 485.11 102.9 485.13 102.93 485.15 102.99 485.16 102.97 485.22 101.22 490.96 100.5 495.31 98.77 505.78 98.79 517.39 98.79 517.88 98.5 518.29 98.25 518.63 98.23 519.04 97.87 528.44 98.18 537.77"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M98.18 537.77Q98.75 547.92 100.1 554.97q3.73 19.49 13.1 38.62 15.56 31.76 43.03 52.74Q162.21 650.9 172.97 656.97 173.4 657.21 173.93 657.11 174.27 657.04 174.47 657.33 175.25 658.44 176.62 658.35 176.74 658.34 176.63 658.37 176.5 658.41 176.38 658.48 176.21 658.58 176.36 658.71 179.72 661.6 184.36 663.69 193.12 667.64 200.92 670.96 203.51 672.06 206.39 672.09C213.79 672.17 220.75 674.59 227.85 675.5Q241.51 677.25 258.42 677.27 335.37 677.38 410.89 677.26 415.61 677.25 421.31 677.06A.94.94.0 00422.22 676.12L422.48 603.46"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M422.48 603.46C422.72 519.97 422.5 436.49 422.59 353Q422.59 348.1 423.66 344.48C424.85 340.39 429.55 336.76 433.9 336.21Q436.66 335.85 439.49 335.86 494.27 335.98 572.06 335.69 584.93 335.64 589.91 334.78 597.94 333.4 606.26 330.74C615.95 327.65 626.03 324.05 635.5 320.14Q646.37 315.66 657.62 312.96 667.09 310.69 676.08 307.82 691.68 302.85 706.51 297.5 712.77 295.24 718.01 296.26"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M718.01 296.26Q725.51 299 729.94 305.03 734.73 311.55 735.73 318.39 736.01 320.31 736.08 332.62 736.25 364.24 736.19 397 736.19 399.08 736.23 400.97"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M736.23 400.97Q735.9 449.45 735.46 497.75 735.19 527.79 736.15 604.08"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M736.15 604.08 736.67 675.56A2.19 2.19.0 00738.87 677.73Q767.94 677.54 795.44 677.62 817.97 677.68 841.39 674.15 847.16 673.28 852.49 671.66C860.03 669.38 868.01 666.67 874.77 663.04 886.51 656.73 899.29 648.52 907.95 640.2Q915.92 632.55 923.63 625.37 929.31 620.09 933.33 613.73C935.19 610.8 937.51 608.42 939.12 605.35 940.33 603.02 941.92 600.89 943.21 598.54Q943.45 598.12 943.29 597.67L943.16 597.31A.83.81 57.5 01943.33 596.5Q944.29 595.46 944.39 593.99A1.71 1.69-26.2 01944.69 593.13Q945.61 591.77 945.97 590.12 946.3 588.59 946.91 587.17 949.11 582.1 951.27 576.84 951.72 575.76 951.83 574.56 951.94 573.38 952.44 572.26 953.13 570.7 953.66 569.03 955.4 563.55 956.49 558.44 958.79 547.6 959.78 535.62 961.35 516.61 958.61 497.75C957.77 492.01 956.07 486.17 954.92 480.43Q954.15 476.64 952.59 472.89 950.98 469.01 950.1 465.43 949.18 461.64 947.3 458.42C946.62 457.26 946.43 456.23 946.02 455.01Q945.59 453.76 944.8 452.54 943.11 449.92 941.65 447.11C941.28 446.4 941.38 445.57 941.14 445Q940.04 442.39 934.75 436.96"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M934.75 436.96c-13.04-17.58-27.99-33.32-46.72-44.66"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M888.03 392.3Q882.24 387.36 875.24 384.36 875.2 384.34 875.22 384.3L875.35 384.08Q875.43 383.93 875.59 384L877.96 385.14Q877.99 385.16 878 385.13L878.15 384.9Q878.28 384.7 878.05 384.62 872.13 382.5 867.06 380.02 863.08 378.07 858.83 376.66 854.27 375.14 850.01 374.21 849.95 374.2 849.93 374.26L849.87 374.51A.03.03.0 00849.9 374.55Q857.11 375.83 861.77 378.39 864.48 379.88 861.51 379.04 859.01 378.34 856.67 377.6 852.48 376.26 846.15 375.67 846.1 375.67 846.08 375.63 846.06 375.57 846.12 375.55 846.17 375.54 846.21 375.55 847.25 375.84 848.13 375.69 848.82 375.58 848.13 375.43 844.1 374.56 840.02 375.3"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M840.02 375.3C831.63 374.33 823.73 372.69 814.84 373.31 813.35 373.41 812.06 372.84 810.51 372.87Q803.01 373.01 796.27 374.55C793.63 375.15 790.95 375.45 788.28 375.61Q787.88 375.64 787.61 375.92 787.23 376.32 786.68 376.4 780.74 377.31 775.04 379.37 770.87 380.88 764.64 384.8 759.7 387.91 754.7 391.19"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M754.7 391.19Q756.26 383.46 757.81 375.98 759.76 366.58 760.51 360.7 763.46 337.48 761.63 314.17 760.99 306.01 758.91 294.37 757.01 283.7 754.89 272.75 752.59 260.84 747.54 249.46 745.67 245.25 743.7 240.2 741.38 234.25 736.66 226.75C735.76 225.32 735.24 223.86 734.21 222.51Q733.24 221.24 732.62 219.78C731.88 218.02 730.63 216.88 729.84 215.09 728.87 212.88 727.16 211.39 726.04 209.26Q724.69 206.7 722.92 204.55 721.11 202.35 719.49 200.03C716.95 196.39 714.67 192.59 711.27 189.61Q707.54 186.33 704.82 182.42C701.84 178.13 697.85 175.09 694.54 171.01 691.17 166.84 686.76 163.44 682.74 159.88 681.82 159.06 681.72 157.86 680.73 157.06Q677.63 154.54 674.69 152.45A.07.06-54.1 00674.6 152.47L674.46 152.68Q674.33 152.89 674.54 153.03 676.02 153.98 677.32 155.07 677.52 155.24 677.29 155.11C674.74 153.75 672.51 152.11 670.69 149.82Q669.3 148.07 667.31 146.74 660.44 142.14 653.7 138.48 648.98 135.92 644.35 132.84 639.79 129.81 632.39 126.59 617.15 119.97 605.94 116.26C604.1 115.65 602.23 115.81 600.47 115.15"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M600.47 115.15Q599.76 114.79 599.28 114.25"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M599.28 114.25Q596.64 112.8 593.69 111.95 583.64 109.04 573.39 106.9 563.66 104.88 556.72 105.12"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M556.72 105.12Q535.59 102.85 519.25 103.18 496.98 103.62 471.85 109.31C463.27 111.26 455.62 114.24 447.42 117.07Q446.79 117.29 446.29 117.73 445.73 118.22 445.1 118.66 444.28 119.23 443.25 119.55 441.01 120.23 438.8 120.98"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M556.72 105.12Q564.58 106.17 572.15 108.42C574.83 109.21 577.17 109.07 579.82 109.64Q580.27 109.74 580.44 110.18 580.67 110.82 581.38 110.86 584.36 111.04 587.12 112.11C589.32 112.96 591.64 112.98 593.93 113.32Q594.18 113.36 596.46 114.17 597.76 114.63 599.28 114.25"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M600.47 115.15Q594.24 113.95 588.04 112.66 587.87 112.62 587.83 112.79 587.79 112.96 587.95 113.01 608.88 119.22 628.21 129.72C633.49 132.58 638.52 136.35 642.99 140.24q14.51 12.64 31.59 30.96Q681.7 178.84 686.51 185.46 692.99 194.41 696.62 201.36q10.9 20.91 18.41 47.15Q719.1 262.72 719.73 277.51 719.97 283.23 720.2 288.75 720.33 291.8 718.01 296.26"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M422.48 603.46 422.19 604.18Q421.98 604.7 421.43 604.61 416.66 603.86 412.59 603.87 348.88 604.09 284.71 603.84 267.13 603.77 251.02 602.46q-26.06-2.13-48.84-16.86C192.75 579.51 184.08 570.63 176.23 562.27 168.02 553.53 162.76 544.13 157.62 533.43Q155.23 528.46 153.32 520.84 150.92 511.24 149.17 502.91 148.38 499.18 148.32 495.49 148.17 486.3 148.6 475.52 148.73 472.34 149.5 469.45C150.03 467.49 149.69 465.7 150.07 463.83Q151.96 454.51 155.02 444.09 155.48 442.53 153.86 442.72 152.56 442.88 151.06 444.55 146.57 449.55 141.46 455.04 139.5 457.14 138.35 459.6C134.82 467.17 129.7 474.41 125.5 481.29Q121.17 488.38 116.92 498.43q-5.45 12.9-6.99 23.22C108.92 528.49 108.26 535.39 107.3 542.31Q107.23 542.83 106.78 543.08C101.52 546 99.61 542.27 98.18 537.77"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M240.43 373.13Q248.72 374.13 256.93 375.23C258.7 375.47 260.5 375.38 262.22 375.92Q264.38 376.6 266.46 376.63 268.9 376.67 270.74 377.14 278.05 378.99 285.05 381.84"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M305.93 254.25l12.09-25.79"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M323.12 217.7 323.73 217.65Q324.29 217.6 324.32 217.04 324.34 216.71 324.56 216.47 325.2 215.76 324.74 216.59 324.56 216.9 324.39 217.19 324.34 217.28 324.42 217.33 324.53 217.4 324.61 217.5 324.73 217.67 324.8 217.48L327.22 210.74Q327.33 210.44 327.62 210.57L327.88 210.69Q327.9 210.7 327.87 210.75L326.51 213.47Q326.35 213.8 326.68 213.96L326.95 214.1A.12.12.0 00327.11 214.04Q328.64 210.79 330.13 208.73 334.34 202.94 338.25 196.98C340.99 192.8 344.46 188.91 347.45 184.72"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M423.21 127.52l11.43-4.11Q434.84 123.34 434.69 123.5 434.59 123.61 434.43 123.71 433.68 124.17 434.55 124.09 434.86 124.06 435.14 123.85 436.98 122.44 438.8 120.98"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M754.7 391.19Q747.41 397.76 741.58 399.89 740.39 400.32 736.23 400.97"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M840.02 375.3Q848.37 376.89 856.74 378.43 858.39 378.73 859.67 379.4 861.35 380.28 862.67 380.11 863.04 380.06 862.71 380.22 862.58 380.28 862.61 380.45A.15.15.0 00862.73 380.57Q866.19 381.33 869.24 383.34 871.62 384.91 874.77 386.12 881.6 388.74 888.03 392.3"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M934.75 436.96Q933.36 439.7 931.62 440.82 930.42 441.59 929.18 440.89C920.72 436.1 912.25 432.32 903.95 427.51Q895.85 422.81 887.81 419.18A.49.49.0 00887.11 419.62Q887.09 420.94 887.79 422.07C891.49 428.02 895.07 433.53 898.27 440Q900.43 444.36 901.68 448 905.05 457.86 905.65 470.46 906.19 481.77 906.47 492.77 906.79 505.08 902.92 519.5C901.13 526.18 898.98 532.57 895.88 538.78Q889.94 550.64 883.64 559.19 875.85 569.75 866.31 577.47 846.68 593.35 821.44 600.21C811.7 602.85 801.87 603.19 791.75 603.52Q762.45 604.46 736.15 604.08"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M572.05 680.95Q573.46 683.34 577.75 683.35 578.25 683.35 578.66 683.64 580.2 684.7 582 685.13 584.37 685.69 585.95 686.1 588.82 686.85 591.3 687.21C595.8 687.86 600.29 689.82 604.84 691.11Q618.05 694.87 630.86 698.4 635.66 699.73 651.25 702.9 652.68 703.19 654.31 703.37 655.83 703.54 657.52 704.26 660.29 705.43 664.46 705.55"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M664.46 705.55 700.51 716.23A.45.45.0 00701.07 715.67Q700.51 713.85 700.53 711.75 701.4 620.4 700.42 518.5 700.28 504.3 700.93 458.5 701.46 420.35 700.4 335.5 700.38 334.25 700.52 333.01A.89.88 85.1 00699.4 332.06Q679.62 337.71 665.91 342.7 641.72 351.5 619.65 358.49 592.44 367.1 572.6 374.15A1.9 1.89-9.9 00571.34 375.93Q571.18 513.33 571.39 654.5 571.41 667.76 572.05 680.95"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M664.46 705.55Q662.11 704.49 659.7 703.75 657.6 703.1 655.67 702.18 653.66 701.22 651.42 700.83C647.87 700.21 644.58 699.9 641.14 698.5Q637.25 696.91 633.31 695.66 624.29 692.77 614.98 690.12 607.98 688.12 599.95 686.55 588.3 684.27 584.74 683.66 576.99 682.31 572.05 680.95"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M506.73 508.96Q507.23 508.97 507.24 509.47L507.61 567.73A1.71 1.71.0 00509.29 569.43L512.14 569.48Q513.67 569.51 513.68 567.99L514.06 509.31A.65.65.0 01514.72 508.66Q524.38 508.75 533.37 508.51 534.45 508.49 535.45 508.14 536.77 507.68 535.94 506.56 525.56 492.62 516.03 477.72 513.11 473.15 510.64 468.22A.71.71.0 00509.34 468.32Q508.89 469.68 508.14 470.81 499.59 483.62 490.59 498.33C488.69 501.42 486.13 503.98 484.7 507.4A.85.84-75.5 00485.38 508.57C492.34 509.35 499.77 508.84 506.73 508.96"/><path stroke="#e2f3ff" vector-effect="non-scaling-stroke" d="M323.4069 219.9496A.86.45 98.9 00323.9846 219.1696.86.45 98.9 00323.6731 218.2504.86.45 98.9 00323.0954 219.0304.86.45 98.9 00323.4069 219.9496"/><path stroke="#76a3c4" vector-effect="non-scaling-stroke" d="M562.87 105.64Q563.01 105.79 563.21 105.74 563.58 105.65 563.24 105.48 563.06 105.39 562.89 105.5A.09.09.0 00562.87 105.64"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M679.22 372.53C679.23 371.09 679.54 369.88 679.85 368.51A.54.54.0 00679.29 367.85Q677.1 368.03 675.2 368.64 662.08 372.86 652.04 375.23 641.91 377.62 633.09 380.61 616.35 386.29 597.27 393.54C595.19 394.33 594.11 394.37 594.1 396.75Q593.82 453.73 594.23 510.63A.53.53.0 00594.87 511.14C612.16 507.54 629.52 503.71 647.2 500.59Q662.96 497.81 678.69 494.94 679.2 494.85 679.2 494.33 679.02 429.9 679.22 372.53"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M679.1894 535.7817a14.73 13.11 84.9 0011.7487-15.8371 14.73 13.11 84.9 00-14.3675-13.5063 14.73 13.11 84.9 00-11.7487 15.8371 14.73 13.11 84.9 0014.3675 13.5063"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M653.47 677.48C653.58 677.65 653.78 677.81 653.97 677.85Q666.29 680.76 678.03 684.83A.8.79-79.7 00679.09 684.09C679.65 637.75 679.02 593.21 679.12 547.6Q679.12 546.36 677.91 546.11 673.94 545.3 670.08 544.24C662.1 542.05 657.76 536.87 655.27 529.33A.58.57 76.9 00654.64 528.93Q625.29 532.84 594.78 537.76A.97.97.0 00593.96 538.72L594.14 660.05A1.82 1.81-79.8 00595.31 661.75Q600.8 663.83 606.74 665.66 624.02 670.98 642.31 674.66 645.11 675.22 647.69 676.02 650.42 676.85 653.38 677.42 653.44 677.43 653.47 677.48"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M663.15 390.16A.99.99.0 00661.85 389.22l-51.99 17.14A.99.99.0 00609.19 407.31L609.77 491.24A.99.99.0 00610.99 492.19L662.55 480A.99.99.0 00663.31 479.04L663.15 390.16"/><path stroke="#93b0c4" vector-effect="non-scaling-stroke" d="M610.01 645.38C610.01 646.98 610.77 648.42 612.26 649.06 620.63 652.63 629.2 654.01 637.6 656.47Q649.19 659.86 661.88 663.03 663.27 663.38 663.33 661.95 663.43 659.77 663.43 657.69 663.36 600.71 663.09 550.52A1.49 1.48 1.9 00661.71 549.05Q658.24 548.79 654.88 548.95 640.98 549.6 624.11 551.2 617.1 551.87 609.98 552.02A.46.45-1.3 00609.53 552.48Q609.94 600.04 610.01 645.38"/></g><path fill="#276089" d="M255.43 337.58A1.16 1.15-8 00256.16 336.62Q256.94 329.44 256.97 321.89 257.01 312.67 258.49 300.83 260.97 280.96 264.63 264.23 267.08 253.08 270.94 243.18C272.28 239.75 274.57 236.93 276.22 233.52 282.54 220.44 289.18 206.77 297.09 195.08c14.64-21.65 32.53-44.29 51-59.85Q358.75 126.26 377.98 112.74 386.74 106.58 396.21 101.52q32.66-17.44 64.71-24.98C478.3 72.45 497.66 69.39 516.24 68.95Q539.13 68.4 559.76 70.68 603.35 75.49 639 92.39c15.7 7.44 31.16 15.56 45.33 25.63C708.06 134.9 728.25 153.79 745.77 178.17q28.53 39.69 41.12 83.29C789.89 271.86 792.34 283.71 793.66 294.66Q796.2 315.76 797.41 337.48A1.29 1.29.0 00798.69 338.7Q815.49 338.72 831.21 339.39C868.91 341 905.17 359.29 933.64 383.01 939.46 387.86 944.72 394.3 949.76 400.34 970.1 424.7 985.53 454.74 991.58 486.07Q997.12 514.79 994.49 540.6 989.42 590.5 960.66 630.97 946.97 650.24 931.32 664.82 918.69 676.6 899.38 686.96 880.83 696.92 863.47 701.77 836.07 709.42 806.25 710.24 774.38 711.1 736.61 711.19A1.97 1.96 7.1 00734.72 712.66C734.18 714.76 733.61 717.01 733.65 719.2 733.84 728.71 732.87 743.34 721.34 746.39Q718.5 747.14 716.12 748.82 715.67 749.14 715.13 749.15 713.55 749.18 711.03 748.73C690.73 745.11 671.12 739.21 651.67 733.55 640.94 730.43 629.8 726.69 618.56 723.66Q594.7 717.23 575.34 712.41 569.8 711.03 554.9 710.73C535.85 710.34 517.09 709.97 498.26 710.05Q426.4 710.36 354.01 711.11C327.54 711.39 300.74 711.31 273.96 711.36Q244.61 711.41 219.84 708.3 208.25 706.84 188 700.75 172.03 695.95 155.79 686.75 144.05 680.09 137 674.83c-19.35-14.45-34.77-33.51-48.28-53.75C85.29 615.94 82.26 610.27 79.9 604.58 72.57 586.93 66.35 568.74 63.94 550.49 62.68 540.98 61.35 531.56 61.65 521.49q1.04-35.65 13.88-70.2Q79.3 441.12 83.46 433.44q17.03-31.42 43.33-53.64c21.23-17.94 45.35-29.63 72.03-36.95C216.78 337.93 234.03 338.04 253.26 337.98Q254.42 337.98 255.43 337.58zM438.8 120.98Q435.57 121.88 434.78 122.21 431.12 123.7 423.21 127.52C416.56 130.57 409.18 133.39 403.28 136.68Q394.42 141.62 387.66 147.15 379.83 153.54 367.83 164.27C360.8 170.55 354.15 177.8 347.45 184.72L342.5 189.88Q342.21 190.18 341.84 190.38 341.07 190.8 341.03 191.71 341.01 192.11 340.65 191.92 340.53 191.86 340.4 191.9 339.91 192.07 339.71 192.6 339.03 194.41 337.73 195.89 337.39 196.28 337.81 195.97 337.86 195.93 337.92 195.9 338.54 195.6 338.12 196.15 335.04 200.12 332.21 203.99 332.03 204.23 331.79 204.04L331.46 203.78Q331.41 203.74 331.44 203.69 332.29 202.33 333.12 201.24 333.2 201.13 333.11 201 333.07 200.95 333.03 201 332.05 202.53 330.7 203.79 330.54 203.94 330.75 203.87 330.79 203.85 330.84 203.87 331.05 203.97 331.06 204.2 331.13 205.63 329.99 206.5A1.85 1.78 81.9 00329.4 207.32Q329.06 208.29 328.39 209.14 328.09 209.52 327.61 209.58 325.89 209.82 326 211.78A1.3 1.27-28 01325.72 212.66Q324.07 214.8 323.12 217.7L318.02 228.46Q313.27 234.86 311.76 237.75 309.37 242.33 305.99 252.05 304.46 256.44 305.93 254.25 305.62 255.63 304.89 256.82 304.77 257.01 304.97 257.12L305.2 257.24Q305.23 257.26 305.24 257.22 306.13 255.05 307.26 252.78 307.34 252.62 307.51 252.71L307.73 252.82Q307.75 252.84 307.74 252.86 306.25 255.22 305.41 257.9 304.19 261.82 302.64 265.97 302.35 266.75 301.89 267.38C300.98 268.59 301.07 270.27 300.39 271.68Q299.06 274.47 298.36 277.53 298.26 277.97 297.92 278.28 297.32 278.84 297.16 279.76 296.53 283.42 295.29 287.79C294.38 290.99 294.69 294.16 293.83 297.36 292.99 300.5 293.12 303.75 292.59 306.9Q290.82 317.42 290.83 332.15C290.83 348.21 291.88 362.54 296.59 377.96Q298.48 384.15 300.49 390.37 301.18 392.52 299.65 390.86 298.11 389.19 295.54 387.72 290.29 384.72 285.05 381.84 283.43 380.56 281.9 380.1C279.89 379.5 278.26 378.64 276.39 378.23 274.28 377.77 271.98 376.83 270.21 376.37Q255.65 372.58 240.43 373.13 233.74 372.8 227 373.57 218.25 374.57 209.52 375.73 205.54 376.26 202.03 377.1 198.41 377.96 194.65 378.96 194.3 379.05 194.13 379.39A.74.72-79.5 01193.55 379.8Q189.92 380.15 187.2 381.49 184.73 382.71 182.18 383.81 179.39 385.01 177.01 386.52q-10.2 6.5-21.71 15.23-11.53 8.75-19.24 19.06C135.77 421.2 135.78 421.58 135.55 421.95Q132.47 426.87 128.69 431.08 125.96 434.1 123.91 437.19 121.72 440.47 119.57 443.8 119.26 444.28 119.09 444.83 118.95 445.24 118.63 445.53 116.84 447.17 116 449.6A1.7 1.69 80.4 01115.47 450.35Q115.1 450.66 114.87 451.08 111.96 456.46 110.57 460.85 109.15 465.35 107.7 469.25 104.74 477.22 102.44 485.43 102.33 485.83 102.71 485.65 103.01 485.5 102.86 485.13 102.81 485.01 102.88 485.11 102.9 485.13 102.93 485.15 102.99 485.16 102.97 485.22 101.22 490.96 100.5 495.31 98.77 505.78 98.79 517.39 98.79 517.88 98.5 518.29 98.25 518.63 98.23 519.04 97.87 528.44 98.18 537.77 98.75 547.92 100.1 554.97q3.73 19.49 13.1 38.62 15.56 31.76 43.03 52.74Q162.21 650.9 172.97 656.97 173.4 657.21 173.93 657.11 174.27 657.04 174.47 657.33 175.25 658.44 176.62 658.35 176.74 658.34 176.63 658.37 176.5 658.41 176.38 658.48 176.21 658.58 176.36 658.71 179.72 661.6 184.36 663.69 193.12 667.64 200.92 670.96 203.51 672.06 206.39 672.09C213.79 672.17 220.75 674.59 227.85 675.5Q241.51 677.25 258.42 677.27 335.37 677.38 410.89 677.26 415.61 677.25 421.31 677.06A.94.94.0 00422.22 676.12L422.48 603.46C422.72 519.97 422.5 436.49 422.59 353Q422.59 348.1 423.66 344.48C424.85 340.39 429.55 336.76 433.9 336.21Q436.66 335.85 439.49 335.86 494.27 335.98 572.06 335.69 584.93 335.64 589.91 334.78 597.94 333.4 606.26 330.74C615.95 327.65 626.03 324.05 635.5 320.14Q646.37 315.66 657.62 312.96 667.09 310.69 676.08 307.82 691.68 302.85 706.51 297.5 712.77 295.24 718.01 296.26 725.51 299 729.94 305.03 734.73 311.55 735.73 318.39 736.01 320.31 736.08 332.62 736.25 364.24 736.19 397 736.19 399.08 736.23 400.97 735.9 449.45 735.46 497.75 735.19 527.79 736.15 604.08L736.67 675.56A2.19 2.19.0 00738.87 677.73Q767.94 677.54 795.44 677.62 817.97 677.68 841.39 674.15 847.16 673.28 852.49 671.66C860.03 669.38 868.01 666.67 874.77 663.04 886.51 656.73 899.29 648.52 907.95 640.2Q915.92 632.55 923.63 625.37 929.31 620.09 933.33 613.73C935.19 610.8 937.51 608.42 939.12 605.35 940.33 603.02 941.92 600.89 943.21 598.54Q943.45 598.12 943.29 597.67L943.16 597.31A.83.81 57.5 01943.33 596.5Q944.29 595.46 944.39 593.99A1.71 1.69-26.2 01944.69 593.13Q945.61 591.77 945.97 590.12 946.3 588.59 946.91 587.17 949.11 582.1 951.27 576.84 951.72 575.76 951.83 574.56 951.94 573.38 952.44 572.26 953.13 570.7 953.66 569.03 955.4 563.55 956.49 558.44 958.79 547.6 959.78 535.62 961.35 516.61 958.61 497.75C957.77 492.01 956.07 486.17 954.92 480.43Q954.15 476.64 952.59 472.89 950.98 469.01 950.1 465.43 949.18 461.64 947.3 458.42C946.62 457.26 946.43 456.23 946.02 455.01Q945.59 453.76 944.8 452.54 943.11 449.92 941.65 447.11C941.28 446.4 941.38 445.57 941.14 445Q940.04 442.39 934.75 436.96c-13.04-17.58-27.99-33.32-46.72-44.66Q882.24 387.36 875.24 384.36 875.2 384.34 875.22 384.3L875.35 384.08Q875.43 383.93 875.59 384L877.96 385.14Q877.99 385.16 878 385.13L878.15 384.9Q878.28 384.7 878.05 384.62 872.13 382.5 867.06 380.02 863.08 378.07 858.83 376.66 854.27 375.14 850.01 374.21 849.95 374.2 849.93 374.26L849.87 374.51A.03.03.0 00849.9 374.55Q857.11 375.83 861.77 378.39 864.48 379.88 861.51 379.04 859.01 378.34 856.67 377.6 852.48 376.26 846.15 375.67 846.1 375.67 846.08 375.63 846.06 375.57 846.12 375.55 846.17 375.54 846.21 375.55 847.25 375.84 848.13 375.69 848.82 375.58 848.13 375.43 844.1 374.56 840.02 375.3C831.63 374.33 823.73 372.69 814.84 373.31 813.35 373.41 812.06 372.84 810.51 372.87Q803.01 373.01 796.27 374.55C793.63 375.15 790.95 375.45 788.28 375.61Q787.88 375.64 787.61 375.92 787.23 376.32 786.68 376.4 780.74 377.31 775.04 379.37 770.87 380.88 764.64 384.8 759.7 387.91 754.7 391.19 756.26 383.46 757.81 375.98 759.76 366.58 760.51 360.7 763.46 337.48 761.63 314.17 760.99 306.01 758.91 294.37 757.01 283.7 754.89 272.75 752.59 260.84 747.54 249.46 745.67 245.25 743.7 240.2 741.38 234.25 736.66 226.75C735.76 225.32 735.24 223.86 734.21 222.51Q733.24 221.24 732.62 219.78C731.88 218.02 730.63 216.88 729.84 215.09 728.87 212.88 727.16 211.39 726.04 209.26Q724.69 206.7 722.92 204.55 721.11 202.35 719.49 200.03C716.95 196.39 714.67 192.59 711.27 189.61Q707.54 186.33 704.82 182.42C701.84 178.13 697.85 175.09 694.54 171.01 691.17 166.84 686.76 163.44 682.74 159.88 681.82 159.06 681.72 157.86 680.73 157.06Q677.63 154.54 674.69 152.45A.07.06-54.1 00674.6 152.47L674.46 152.68Q674.33 152.89 674.54 153.03 676.02 153.98 677.32 155.07 677.52 155.24 677.29 155.11C674.74 153.75 672.51 152.11 670.69 149.82Q669.3 148.07 667.31 146.74 660.44 142.14 653.7 138.48 648.98 135.92 644.35 132.84 639.79 129.81 632.39 126.59 617.15 119.97 605.94 116.26C604.1 115.65 602.23 115.81 600.47 115.15Q599.76 114.79 599.28 114.25 596.64 112.8 593.69 111.95 583.64 109.04 573.39 106.9 563.66 104.88 556.72 105.12 535.59 102.85 519.25 103.18 496.98 103.62 471.85 109.31C463.27 111.26 455.62 114.24 447.42 117.07Q446.79 117.29 446.29 117.73 445.73 118.22 445.1 118.66 444.28 119.23 443.25 119.55 441.01 120.23 438.8 120.98zM572.05 680.95Q573.46 683.34 577.75 683.35 578.25 683.35 578.66 683.64 580.2 684.7 582 685.13 584.37 685.69 585.95 686.1 588.82 686.85 591.3 687.21C595.8 687.86 600.29 689.82 604.84 691.11Q618.05 694.87 630.86 698.4 635.66 699.73 651.25 702.9 652.68 703.19 654.31 703.37 655.83 703.54 657.52 704.26 660.29 705.43 664.46 705.55L700.51 716.23A.45.45.0 00701.07 715.67Q700.51 713.85 700.53 711.75 701.4 620.4 700.42 518.5 700.28 504.3 700.93 458.5 701.46 420.35 700.4 335.5 700.38 334.25 700.52 333.01A.89.88 85.1 00699.4 332.06Q679.62 337.71 665.91 342.7 641.72 351.5 619.65 358.49 592.44 367.1 572.6 374.15A1.9 1.89-9.9 00571.34 375.93Q571.18 513.33 571.39 654.5 571.41 667.76 572.05 680.95zM506.73 508.96Q507.23 508.97 507.24 509.47L507.61 567.73A1.71 1.71.0 00509.29 569.43L512.14 569.48Q513.67 569.51 513.68 567.99L514.06 509.31A.65.65.0 01514.72 508.66Q524.38 508.75 533.37 508.51 534.45 508.49 535.45 508.14 536.77 507.68 535.94 506.56 525.56 492.62 516.03 477.72 513.11 473.15 510.64 468.22A.71.71.0 00509.34 468.32Q508.89 469.68 508.14 470.81 499.59 483.62 490.59 498.33C488.69 501.42 486.13 503.98 484.7 507.4A.85.84-75.5 00485.38 508.57C492.34 509.35 499.77 508.84 506.73 508.96z"/><path fill="#fff" d="M556.72 105.12Q564.58 106.17 572.15 108.42C574.83 109.21 577.17 109.07 579.82 109.64Q580.27 109.74 580.44 110.18 580.67 110.82 581.38 110.86 584.36 111.04 587.12 112.11C589.32 112.96 591.64 112.98 593.93 113.32Q594.18 113.36 596.46 114.17 597.76 114.63 599.28 114.25 599.76 114.79 600.47 115.15 594.24 113.95 588.04 112.66 587.87 112.62 587.83 112.79 587.79 112.96 587.95 113.01 608.88 119.22 628.21 129.72C633.49 132.58 638.52 136.35 642.99 140.24q14.51 12.64 31.59 30.96Q681.7 178.84 686.51 185.46 692.99 194.41 696.62 201.36q10.9 20.91 18.41 47.15Q719.1 262.72 719.73 277.51 719.97 283.23 720.2 288.75 720.33 291.8 718.01 296.26 712.77 295.24 706.51 297.5 691.68 302.85 676.08 307.82 667.09 310.69 657.62 312.96 646.37 315.66 635.5 320.14C626.03 324.05 615.95 327.65 606.26 330.74Q597.94 333.4 589.91 334.78 584.93 335.64 572.06 335.69 494.27 335.98 439.49 335.86 436.66 335.85 433.9 336.21C429.55 336.76 424.85 340.39 423.66 344.48Q422.59 348.1 422.59 353C422.5 436.49 422.72 519.97 422.48 603.46L422.19 604.18Q421.98 604.7 421.43 604.61 416.66 603.86 412.59 603.87 348.88 604.09 284.71 603.84 267.13 603.77 251.02 602.46q-26.06-2.13-48.84-16.86C192.75 579.51 184.08 570.63 176.23 562.27 168.02 553.53 162.76 544.13 157.62 533.43Q155.23 528.46 153.32 520.84 150.92 511.24 149.17 502.91 148.38 499.18 148.32 495.49 148.17 486.3 148.6 475.52 148.73 472.34 149.5 469.45C150.03 467.49 149.69 465.7 150.07 463.83Q151.96 454.51 155.02 444.09 155.48 442.53 153.86 442.72 152.56 442.88 151.06 444.55 146.57 449.55 141.46 455.04 139.5 457.14 138.35 459.6C134.82 467.17 129.7 474.41 125.5 481.29Q121.17 488.38 116.92 498.43q-5.45 12.9-6.99 23.22C108.92 528.49 108.26 535.39 107.3 542.31Q107.23 542.83 106.78 543.08C101.52 546 99.61 542.27 98.18 537.77Q97.87 528.44 98.23 519.04 98.25 518.63 98.5 518.29 98.79 517.88 98.79 517.39 98.77 505.78 100.5 495.31 101.22 490.96 102.97 485.22 102.99 485.16 102.93 485.15 102.9 485.13 102.88 485.11 102.81 485.01 102.86 485.13 103.01 485.5 102.71 485.65 102.33 485.83 102.44 485.43 104.74 477.22 107.7 469.25 109.15 465.35 110.57 460.85 111.96 456.46 114.87 451.08 115.1 450.66 115.47 450.35A1.7 1.69 80.4 00116 449.6Q116.84 447.17 118.63 445.53 118.95 445.24 119.09 444.83 119.26 444.28 119.57 443.8 121.72 440.47 123.91 437.19 125.96 434.1 128.69 431.08 132.47 426.87 135.55 421.95C135.78 421.58 135.77 421.2 136.06 420.81Q143.77 410.5 155.3 401.75 166.81 393.02 177.01 386.52 179.39 385.01 182.18 383.81 184.73 382.71 187.2 381.49 189.92 380.15 193.55 379.8A.74.72-79.5 00194.13 379.39Q194.3 379.05 194.65 378.96 198.41 377.96 202.03 377.1 205.54 376.26 209.52 375.73 218.25 374.57 227 373.57 233.74 372.8 240.43 373.13 248.72 374.13 256.93 375.23C258.7 375.47 260.5 375.38 262.22 375.92Q264.38 376.6 266.46 376.63 268.9 376.67 270.74 377.14 278.05 378.99 285.05 381.84 290.29 384.72 295.54 387.72 298.11 389.19 299.65 390.86 301.18 392.52 300.49 390.37 298.48 384.15 296.59 377.96C291.88 362.54 290.83 348.21 290.83 332.15Q290.82 317.42 292.59 306.9C293.12 303.75 292.99 300.5 293.83 297.36 294.69 294.16 294.38 290.99 295.29 287.79Q296.53 283.42 297.16 279.76 297.32 278.84 297.92 278.28 298.26 277.97 298.36 277.53 299.06 274.47 300.39 271.68C301.07 270.27 300.98 268.59 301.89 267.38Q302.35 266.75 302.64 265.97 304.19 261.82 305.41 257.9 306.25 255.22 307.74 252.86 307.75 252.84 307.73 252.82L307.51 252.71Q307.34 252.62 307.26 252.78 306.13 255.05 305.24 257.22 305.23 257.26 305.2 257.24L304.97 257.12Q304.77 257.01 304.89 256.82 305.62 255.63 305.93 254.25l12.09-25.79L323.12 217.7 323.73 217.65Q324.29 217.6 324.32 217.04 324.34 216.71 324.56 216.47 325.2 215.76 324.74 216.59 324.56 216.9 324.39 217.19 324.34 217.28 324.42 217.33 324.53 217.4 324.61 217.5 324.73 217.67 324.8 217.48L327.22 210.74Q327.33 210.44 327.62 210.57L327.88 210.69Q327.9 210.7 327.87 210.75L326.51 213.47Q326.35 213.8 326.68 213.96L326.95 214.1A.12.12.0 00327.11 214.04Q328.64 210.79 330.13 208.73 334.34 202.94 338.25 196.98C340.99 192.8 344.46 188.91 347.45 184.72 354.15 177.8 360.8 170.55 367.83 164.27q12-10.73 19.83-17.12Q394.42 141.62 403.28 136.68C409.18 133.39 416.56 130.57 423.21 127.52l11.43-4.11Q434.84 123.34 434.69 123.5 434.59 123.61 434.43 123.71 433.68 124.17 434.55 124.09 434.86 124.06 435.14 123.85 436.98 122.44 438.8 120.98 441.01 120.23 443.25 119.55 444.28 119.23 445.1 118.66 445.73 118.22 446.29 117.73 446.79 117.29 447.42 117.07C455.62 114.24 463.27 111.26 471.85 109.31q25.13-5.69 47.4-6.13Q535.59 102.85 556.72 105.12zM323.4069 219.9496A.86.45 98.9 00323.9846 219.1696.86.45 98.9 00323.6731 218.2504.86.45 98.9 00323.0954 219.0304.86.45 98.9 00323.4069 219.9496z"/><path fill="#c4e6ff" d="M599.28 114.25Q597.76 114.63 596.46 114.17 594.18 113.36 593.93 113.32C591.64 112.98 589.32 112.96 587.12 112.11Q584.36 111.04 581.38 110.86 580.67 110.82 580.44 110.18 580.27 109.74 579.82 109.64C577.17 109.07 574.83 109.21 572.15 108.42Q564.58 106.17 556.72 105.12 563.66 104.88 573.39 106.9 583.64 109.04 593.69 111.95 596.64 112.8 599.28 114.25zm-36.41-8.61Q563.01 105.79 563.21 105.74 563.58 105.65 563.24 105.48 563.06 105.39 562.89 105.5A.09.09.0 00562.87 105.64z"/><path fill="#276089" d="M562.87 105.64A.09.09.0 01562.89 105.5Q563.06 105.39 563.24 105.48 563.58 105.65 563.21 105.74 563.01 105.79 562.87 105.64z"/><path fill="#c4e6ff" d="M600.47 115.15C602.23 115.81 604.1 115.65 605.94 116.26Q617.15 119.97 632.39 126.59 639.79 129.81 644.35 132.84 648.98 135.92 653.7 138.48 660.44 142.14 667.31 146.74 669.3 148.07 670.69 149.82C672.51 152.11 674.74 153.75 677.29 155.11Q677.52 155.24 677.32 155.07 676.02 153.98 674.54 153.03 674.33 152.89 674.46 152.68L674.6 152.47A.07.06-54.1 01674.69 152.45Q677.63 154.54 680.73 157.06C681.72 157.86 681.82 159.06 682.74 159.88 686.76 163.44 691.17 166.84 694.54 171.01 697.85 175.09 701.84 178.13 704.82 182.42Q707.54 186.33 711.27 189.61C714.67 192.59 716.95 196.39 719.49 200.03Q721.11 202.35 722.92 204.55 724.69 206.7 726.04 209.26C727.16 211.39 728.87 212.88 729.84 215.09 730.63 216.88 731.88 218.02 732.62 219.78Q733.24 221.24 734.21 222.51C735.24 223.86 735.76 225.32 736.66 226.75Q741.38 234.25 743.7 240.2 745.67 245.25 747.54 249.46 752.59 260.84 754.89 272.75 757.01 283.7 758.91 294.37 760.99 306.01 761.63 314.17 763.46 337.48 760.51 360.7 759.76 366.58 757.81 375.98 756.26 383.46 754.7 391.19 747.41 397.76 741.58 399.89 740.39 400.32 736.23 400.97 736.19 399.08 736.19 397 736.25 364.24 736.08 332.62 736.01 320.31 735.73 318.39 734.73 311.55 729.94 305.03 725.51 299 718.01 296.26 720.33 291.8 720.2 288.75 719.97 283.23 719.73 277.51 719.1 262.72 715.03 248.51 707.52 222.27 696.62 201.36 692.99 194.41 686.51 185.46 681.7 178.84 674.58 171.2q-17.08-18.32-31.59-30.96C638.52 136.35 633.49 132.58 628.21 129.72q-19.33-10.5-40.26-16.71Q587.79 112.96 587.83 112.79 587.87 112.62 588.04 112.66 594.24 113.95 600.47 115.15z"/><path fill="#c4e6ff" d="M438.8 120.98Q436.98 122.44 435.14 123.85 434.86 124.06 434.55 124.09 433.68 124.17 434.43 123.71 434.59 123.61 434.69 123.5 434.84 123.34 434.64 123.41l-11.43 4.11Q431.12 123.7 434.78 122.21 435.57 121.88 438.8 120.98z"/><path fill="#c4e6ff" d="M347.45 184.72C344.46 188.91 340.99 192.8 338.25 196.98Q334.34 202.94 330.13 208.73 328.64 210.79 327.11 214.04A.12.12.0 01326.95 214.1L326.68 213.96Q326.35 213.8 326.51 213.47L327.87 210.75Q327.9 210.7 327.88 210.69L327.62 210.57Q327.33 210.44 327.22 210.74L324.8 217.48Q324.73 217.67 324.61 217.5 324.53 217.4 324.42 217.33 324.34 217.28 324.39 217.19 324.56 216.9 324.74 216.59 325.2 215.76 324.56 216.47 324.34 216.71 324.32 217.04 324.29 217.6 323.73 217.65L323.12 217.7Q324.07 214.8 325.72 212.66A1.3 1.27-28 00326 211.78Q325.89 209.82 327.61 209.58 328.09 209.52 328.39 209.14 329.06 208.29 329.4 207.32A1.85 1.78 81.9 01329.99 206.5Q331.13 205.63 331.06 204.2 331.05 203.97 330.84 203.87 330.79 203.85 330.75 203.87 330.54 203.94 330.7 203.79 332.05 202.53 333.03 201 333.07 200.95 333.11 201 333.2 201.13 333.12 201.24 332.29 202.33 331.44 203.69 331.41 203.74 331.46 203.78L331.79 204.04Q332.03 204.23 332.21 203.99 335.04 200.12 338.12 196.15 338.54 195.6 337.92 195.9 337.86 195.93 337.81 195.97 337.39 196.28 337.73 195.89 339.03 194.41 339.71 192.6 339.91 192.07 340.4 191.9 340.53 191.86 340.65 191.92 341.01 192.11 341.03 191.71 341.07 190.8 341.84 190.38 342.21 190.18 342.5 189.88L347.45 184.72z"/><ellipse fill="#c4e6ff" cx="0" cy="0" transform="translate(323.54,219.10) rotate(98.9)" rx=".86" ry=".45"/><path fill="#c4e6ff" d="M305.93 254.25Q304.46 256.44 305.99 252.05 309.37 242.33 311.76 237.75 313.27 234.86 318.02 228.46l-12.09 25.79z"/><path fill="#fff" d="M664.46 705.55Q662.11 704.49 659.7 703.75 657.6 703.1 655.67 702.18 653.66 701.22 651.42 700.83C647.87 700.21 644.58 699.9 641.14 698.5Q637.25 696.91 633.31 695.66 624.29 692.77 614.98 690.12 607.98 688.12 599.95 686.55 588.3 684.27 584.74 683.66 576.99 682.31 572.05 680.95 571.41 667.76 571.39 654.5 571.18 513.33 571.34 375.93A1.9 1.89-9.9 01572.6 374.15Q592.44 367.1 619.65 358.49 641.72 351.5 665.91 342.7 679.62 337.71 699.4 332.06A.89.88 85.1 01700.52 333.01Q700.38 334.25 700.4 335.5 701.46 420.35 700.93 458.5 700.28 504.3 700.42 518.5 701.4 620.4 700.53 711.75 700.51 713.85 701.07 715.67A.45.45.0 01700.51 716.23L664.46 705.55zm14.76-333.02C679.23 371.09 679.54 369.88 679.85 368.51A.54.54.0 00679.29 367.85Q677.1 368.03 675.2 368.64 662.08 372.86 652.04 375.23 641.91 377.62 633.09 380.61 616.35 386.29 597.27 393.54C595.19 394.33 594.11 394.37 594.1 396.75Q593.82 453.73 594.23 510.63A.53.53.0 00594.87 511.14C612.16 507.54 629.52 503.71 647.2 500.59Q662.96 497.81 678.69 494.94 679.2 494.85 679.2 494.33 679.02 429.9 679.22 372.53zM679.1894 535.7817a14.73 13.11 84.9 0011.7487-15.8371 14.73 13.11 84.9 00-14.3675-13.5063 14.73 13.11 84.9 00-11.7487 15.8371 14.73 13.11 84.9 0014.3675 13.5063zM653.47 677.48C653.58 677.65 653.78 677.81 653.97 677.85Q666.29 680.76 678.03 684.83A.8.79-79.7 00679.09 684.09C679.65 637.75 679.02 593.21 679.12 547.6Q679.12 546.36 677.91 546.11 673.94 545.3 670.08 544.24C662.1 542.05 657.76 536.87 655.27 529.33A.58.57 76.9 00654.64 528.93Q625.29 532.84 594.78 537.76A.97.97.0 00593.96 538.72L594.14 660.05A1.82 1.81-79.8 00595.31 661.75Q600.8 663.83 606.74 665.66 624.02 670.98 642.31 674.66 645.11 675.22 647.69 676.02 650.42 676.85 653.38 677.42 653.44 677.43 653.47 677.48z"/><path fill="#276089" d="M679.22 372.53Q679.02 429.9 679.2 494.33 679.2 494.85 678.69 494.94 662.96 497.81 647.2 500.59C629.52 503.71 612.16 507.54 594.87 511.14A.53.53.0 01594.23 510.63Q593.82 453.73 594.1 396.75C594.11 394.37 595.19 394.33 597.27 393.54Q616.35 386.29 633.09 380.61 641.91 377.62 652.04 375.23 662.08 372.86 675.2 368.64 677.1 368.03 679.29 367.85A.54.54.0 01679.85 368.51C679.54 369.88 679.23 371.09 679.22 372.53zM663.15 390.16A.99.99.0 00661.85 389.22l-51.99 17.14A.99.99.0 00609.19 407.31L609.77 491.24A.99.99.0 00610.99 492.19L662.55 480A.99.99.0 00663.31 479.04L663.15 390.16z"/><path fill="#fff" d="M840.02 375.3Q848.37 376.89 856.74 378.43 858.39 378.73 859.67 379.4 861.35 380.28 862.67 380.11 863.04 380.06 862.71 380.22 862.58 380.28 862.61 380.45A.15.15.0 00862.73 380.57Q866.19 381.33 869.24 383.34 871.62 384.91 874.77 386.12 881.6 388.74 888.03 392.3C906.76 403.64 921.71 419.38 934.75 436.96Q933.36 439.7 931.62 440.82 930.42 441.59 929.18 440.89C920.72 436.1 912.25 432.32 903.95 427.51Q895.85 422.81 887.81 419.18A.49.49.0 00887.11 419.62Q887.09 420.94 887.79 422.07C891.49 428.02 895.07 433.53 898.27 440Q900.43 444.36 901.68 448 905.05 457.86 905.65 470.46 906.19 481.77 906.47 492.77 906.79 505.08 902.92 519.5C901.13 526.18 898.98 532.57 895.88 538.78Q889.94 550.64 883.64 559.19 875.85 569.75 866.31 577.47 846.68 593.35 821.44 600.21C811.7 602.85 801.87 603.19 791.75 603.52Q762.45 604.46 736.15 604.08 735.19 527.79 735.46 497.75 735.9 449.45 736.23 400.97 740.39 400.32 741.58 399.89 747.41 397.76 754.7 391.19 759.7 387.91 764.64 384.8 770.87 380.88 775.04 379.37 780.74 377.31 786.68 376.4 787.23 376.32 787.61 375.92 787.88 375.64 788.28 375.61C790.95 375.45 793.63 375.15 796.27 374.55Q803.01 373.01 810.51 372.87C812.06 372.84 813.35 373.41 814.84 373.31 823.73 372.69 831.63 374.33 840.02 375.3z"/><path fill="#c4e6ff" d="M285.05 381.84Q278.05 378.99 270.74 377.14 268.9 376.67 266.46 376.63 264.38 376.6 262.22 375.92C260.5 375.38 258.7 375.47 256.93 375.23Q248.72 374.13 240.43 373.13 255.65 372.58 270.21 376.37C271.98 376.83 274.28 377.77 276.39 378.23 278.26 378.64 279.89 379.5 281.9 380.1Q283.43 380.56 285.05 381.84z"/><path fill="#c4e6ff" d="M888.03 392.3Q881.6 388.74 874.77 386.12 871.62 384.91 869.24 383.34 866.19 381.33 862.73 380.57A.15.15.0 01862.61 380.45Q862.58 380.28 862.71 380.22 863.04 380.06 862.67 380.11 861.35 380.28 859.67 379.4 858.39 378.73 856.74 378.43 848.37 376.89 840.02 375.3 844.1 374.56 848.13 375.43 848.82 375.58 848.13 375.69 847.25 375.84 846.21 375.55 846.17 375.54 846.12 375.55 846.06 375.57 846.08 375.63 846.1 375.67 846.15 375.67 852.48 376.26 856.67 377.6 859.01 378.34 861.51 379.04 864.48 379.88 861.77 378.39 857.11 375.83 849.9 374.55A.03.03.0 01849.87 374.51L849.93 374.26Q849.95 374.2 850.01 374.21 854.27 375.14 858.83 376.66 863.08 378.07 867.06 380.02 872.13 382.5 878.05 384.62 878.28 384.7 878.15 384.9L878 385.13Q877.99 385.16 877.96 385.14L875.59 384Q875.43 383.93 875.35 384.08L875.22 384.3Q875.2 384.34 875.24 384.36q7 3 12.79 7.94z"/><path fill="#fff" d="M663.15 390.16 663.31 479.04A.99.99.0 01662.55 480L610.99 492.19A.99.99.0 01609.77 491.24L609.19 407.31A.99.99.0 01609.86 406.36l51.99-17.14A.99.99.0 01663.15 390.16z"/><path fill="#c4e6ff" d="M934.75 436.96Q940.04 442.39 941.14 445C941.38 445.57 941.28 446.4 941.65 447.11Q943.11 449.92 944.8 452.54 945.59 453.76 946.02 455.01C946.43 456.23 946.62 457.26 947.3 458.42Q949.18 461.64 950.1 465.43 950.98 469.01 952.59 472.89 954.15 476.64 954.92 480.43C956.07 486.17 957.77 492.01 958.61 497.75Q961.35 516.61 959.78 535.62 958.79 547.6 956.49 558.44 955.4 563.55 953.66 569.03 953.13 570.7 952.44 572.26 951.94 573.38 951.83 574.56 951.72 575.76 951.27 576.84 949.11 582.1 946.91 587.17 946.3 588.59 945.97 590.12 945.61 591.77 944.69 593.13A1.71 1.69-26.2 00944.39 593.99Q944.29 595.46 943.33 596.5A.83.81 57.5 00943.16 597.31L943.29 597.67Q943.45 598.12 943.21 598.54C941.92 600.89 940.33 603.02 939.12 605.35 937.51 608.42 935.19 610.8 933.33 613.73Q929.31 620.09 923.63 625.37 915.92 632.55 907.95 640.2C899.29 648.52 886.51 656.73 874.77 663.04 868.01 666.67 860.03 669.38 852.49 671.66Q847.16 673.28 841.39 674.15 817.97 677.68 795.44 677.62 767.94 677.54 738.87 677.73A2.19 2.19.0 01736.67 675.56L736.15 604.08Q762.45 604.46 791.75 603.52C801.87 603.19 811.7 602.85 821.44 600.21Q846.68 593.35 866.31 577.47 875.85 569.75 883.64 559.19 889.94 550.64 895.88 538.78C898.98 532.57 901.13 526.18 902.92 519.5Q906.79 505.08 906.47 492.77 906.19 481.77 905.65 470.46 905.05 457.86 901.68 448 900.43 444.36 898.27 440C895.07 433.53 891.49 428.02 887.79 422.07Q887.09 420.94 887.11 419.62A.49.49.0 01887.81 419.18Q895.85 422.81 903.95 427.51C912.25 432.32 920.72 436.1 929.18 440.89Q930.42 441.59 931.62 440.82 933.36 439.7 934.75 436.96z"/><path fill="#c4e6ff" d="M422.48 603.46 422.22 676.12A.94.94.0 01421.31 677.06Q415.61 677.25 410.89 677.26 335.37 677.38 258.42 677.27 241.51 677.25 227.85 675.5C220.75 674.59 213.79 672.17 206.39 672.09Q203.51 672.06 200.92 670.96 193.12 667.64 184.36 663.69 179.72 661.6 176.36 658.71 176.21 658.58 176.38 658.48 176.5 658.41 176.63 658.37 176.74 658.34 176.62 658.35 175.25 658.44 174.47 657.33 174.27 657.04 173.93 657.11 173.4 657.21 172.97 656.97 162.21 650.9 156.23 646.33q-27.47-20.98-43.03-52.74Q103.83 574.46 100.1 554.97 98.75 547.92 98.18 537.77C99.61 542.27 101.52 546 106.78 543.08Q107.23 542.83 107.3 542.31C108.26 535.39 108.92 528.49 109.93 521.65Q111.47 511.33 116.92 498.43q4.25-10.05 8.58-17.14C129.7 474.41 134.82 467.17 138.35 459.6Q139.5 457.14 141.46 455.04 146.57 449.55 151.06 444.55 152.56 442.88 153.86 442.72 155.48 442.53 155.02 444.09 151.96 454.51 150.07 463.83C149.69 465.7 150.03 467.49 149.5 469.45Q148.73 472.34 148.6 475.52 148.17 486.3 148.32 495.49 148.38 499.18 149.17 502.91 150.92 511.24 153.32 520.84 155.23 528.46 157.62 533.43C162.76 544.13 168.02 553.53 176.23 562.27 184.08 570.63 192.75 579.51 202.18 585.6q22.78 14.73 48.84 16.86Q267.13 603.77 284.71 603.84 348.88 604.09 412.59 603.87 416.66 603.86 421.43 604.61 421.98 604.7 422.19 604.18L422.48 603.46z"/><path fill="#fff" d="M506.73 508.96C499.77 508.84 492.34 509.35 485.38 508.57A.85.84-75.5 01484.7 507.4C486.13 503.98 488.69 501.42 490.59 498.33q9-14.71 17.55-27.52Q508.89 469.68 509.34 468.32A.71.71.0 01510.64 468.22Q513.11 473.15 516.03 477.72 525.56 492.62 535.94 506.56 536.77 507.68 535.45 508.14 534.45 508.49 533.37 508.51 524.38 508.75 514.72 508.66A.65.65.0 00514.06 509.31L513.68 567.99Q513.67 569.51 512.14 569.48L509.29 569.43A1.71 1.71.0 01507.61 567.73L507.24 509.47Q507.23 508.97 506.73 508.96z"/><ellipse fill="#276089" cx="0" cy="0" transform="translate(677.88,521.11) rotate(84.9)" rx="14.73" ry="13.11"/><path fill="#276089" d="M653.38 677.42Q650.42 676.85 647.69 676.02 645.11 675.22 642.31 674.66 624.02 670.98 606.74 665.66 600.8 663.83 595.31 661.75A1.82 1.81-79.8 01594.14 660.05L593.96 538.72A.97.97.0 01594.78 537.76Q625.29 532.84 654.64 528.93A.58.57 76.9 01655.27 529.33C657.76 536.87 662.1 542.05 670.08 544.24Q673.94 545.3 677.91 546.11 679.12 546.36 679.12 547.6C679.02 593.21 679.65 637.75 679.09 684.09A.8.79-79.7 01678.03 684.83Q666.29 680.76 653.97 677.85C653.78 677.81 653.58 677.65 653.47 677.48Q653.44 677.43 653.38 677.42zm-43.37-32.04C610.01 646.98 610.77 648.42 612.26 649.06 620.63 652.63 629.2 654.01 637.6 656.47Q649.19 659.86 661.88 663.03 663.27 663.38 663.33 661.95 663.43 659.77 663.43 657.69 663.36 600.71 663.09 550.52A1.49 1.48 1.9 00661.71 549.05Q658.24 548.79 654.88 548.95 640.98 549.6 624.11 551.2 617.1 551.87 609.98 552.02A.46.45-1.3 00609.53 552.48Q609.94 600.04 610.01 645.38z"/><path fill="#fff" d="M612.26 649.06C610.77 648.42 610.01 646.98 610.01 645.38Q609.94 600.04 609.53 552.48A.46.45-1.3 01609.98 552.02Q617.1 551.87 624.11 551.2 640.98 549.6 654.88 548.95 658.24 548.79 661.71 549.05A1.49 1.48 1.9 01663.09 550.52Q663.36 600.71 663.43 657.69 663.43 659.77 663.33 661.95 663.27 663.38 661.88 663.03 649.19 659.86 637.6 656.47C629.2 654.01 620.63 652.63 612.26 649.06z"/><path fill="#c4e6ff" d="M664.46 705.55Q660.29 705.43 657.52 704.26 655.83 703.54 654.31 703.37 652.68 703.19 651.25 702.9 635.66 699.73 630.86 698.4 618.05 694.87 604.84 691.11C600.29 689.82 595.8 687.86 591.3 687.21Q588.82 686.85 585.95 686.1 584.37 685.69 582 685.13 580.2 684.7 578.66 683.64 578.25 683.35 577.75 683.35 573.46 683.34 572.05 680.95 576.99 682.31 584.74 683.66 588.3 684.27 599.95 686.55 607.98 688.12 614.98 690.12 624.29 692.77 633.31 695.66 637.25 696.91 641.14 698.5C644.58 699.9 647.87 700.21 651.42 700.83Q653.66 701.22 655.67 702.18 657.6 703.1 659.7 703.75 662.11 704.49 664.46 705.55z"/></svg></span><span class=navbar-brand__name>Apache OpenServerless™</span></a><div class="td-navbar-nav-scroll ms-md-auto" id=main_navbar><ul class=navbar-nav><li class=nav-item><a class=nav-link href=/about/><span>About</span></a></li><li class=nav-item><a class=nav-link href=/blog/><span>Blog</span></a></li><li class=nav-item><a class="nav-link active" href=/docs/><span>Docs</span></a></li><li class=nav-item><a class=nav-link href=/community/><span>Community</span></a></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" role=button data-bs-toggle=dropdown aria-haspopup=true aria-expanded=false href><span>Apache Software Foundation</span></a><ul class=dropdown-menu><li><a class=dropdown-item href=https://www.apache.org/>Apache Homepage</a></li><li><a class=dropdown-item href=https://www.apache.org/licenses/>License</a></li><li><a class=dropdown-item href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a class=dropdown-item href=https://www.apache.org/foundation/thanks.html>Thanks</a></li><li><a class=dropdown-item href=https://www.apache.org/security/>Security</a></li><li><a class=dropdown-item href=https://privacy.apache.org/policies/privacy-policy-public.html>Privacy</a></li><li><a class=dropdown-item href=https://www.apache.org/events/current-event>Events</a></li></ul></li></ul></div></div></nav></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-xl-nowrap"><aside class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><div id=td-sidebar-menu class=td-sidebar__inner><form class="td-sidebar__search d-flex align-items-center"><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.18d36acbfd11db1d3f75fcbb2d1cd511.json data-offline-search-base-href=/ data-offline-search-max-results=10></div><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ms-3 fas fa-bars" type=button data-bs-toggle=collapse data-bs-target=#td-section-nav aria-controls=td-section-nav aria-expanded=false aria-label="Toggle section navigation"></button></form><nav class="td-sidebar-nav collapse foldable-nav" id=td-section-nav><ul class="td-sidebar-nav__section pe-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docs-li><a href=/docs/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section tree-root" id=m-docs><span>Docs</span></a><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docstutorial-li><input type=checkbox id=m-docstutorial-check> |
| <label for=m-docstutorial-check><a href=/docs/tutorial/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docstutorial><span>Tutorial</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docstutorialgetting-started-li><input type=checkbox id=m-docstutorialgetting-started-check> |
| <label for=m-docstutorialgetting-started-check><a href=/docs/tutorial/getting-started/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docstutorialgetting-started><span>Getting started</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docstutorialfirst-steps-li><input type=checkbox id=m-docstutorialfirst-steps-check> |
| <label for=m-docstutorialfirst-steps-check><a href=/docs/tutorial/first-steps/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docstutorialfirst-steps><span>First steps</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docstutorialform-validation-li><input type=checkbox id=m-docstutorialform-validation-check> |
| <label for=m-docstutorialform-validation-check><a href=/docs/tutorial/form-validation/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docstutorialform-validation><span>Form validation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docstutorialuse-database-li><input type=checkbox id=m-docstutorialuse-database-check> |
| <label for=m-docstutorialuse-database-check><a href=/docs/tutorial/use-database/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docstutorialuse-database><span>Use database</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docstutorialnotify-message-li><input type=checkbox id=m-docstutorialnotify-message-check> |
| <label for=m-docstutorialnotify-message-check><a href=/docs/tutorial/notify-message/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docstutorialnotify-message><span>Sending notifications</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docstutorialpackaging-li><input type=checkbox id=m-docstutorialpackaging-check> |
| <label for=m-docstutorialpackaging-check><a href=/docs/tutorial/packaging/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docstutorialpackaging><span>App Deployment</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docstutorialconclusions-li><input type=checkbox id=m-docstutorialconclusions-check> |
| <label for=m-docstutorialconclusions-check><a href=/docs/tutorial/conclusions/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docstutorialconclusions><span>Conclusions</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docscli-li><input type=checkbox id=m-docscli-check> |
| <label for=m-docscli-check><a href=/docs/cli/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docscli><span>CLI</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsclientities-li><input type=checkbox id=m-docsclientities-check> |
| <label for=m-docsclientities-check><a href=/docs/cli/entities/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsclientities><span>Entities</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsclientitiespackages-li><input type=checkbox id=m-docsclientitiespackages-check> |
| <label for=m-docsclientitiespackages-check><a href=/docs/cli/entities/packages/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsclientitiespackages><span>Packages</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsclientitiesactions-li><input type=checkbox id=m-docsclientitiesactions-check> |
| <label for=m-docsclientitiesactions-check><a href=/docs/cli/entities/actions/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsclientitiesactions><span>Actions</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsclientitiesactivations-li><input type=checkbox id=m-docsclientitiesactivations-check> |
| <label for=m-docsclientitiesactivations-check><a href=/docs/cli/entities/activations/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsclientitiesactivations><span>Activations</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsclientitiessequences-li><input type=checkbox id=m-docsclientitiessequences-check> |
| <label for=m-docsclientitiessequences-check><a href=/docs/cli/entities/sequences/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsclientitiessequences><span>Sequences</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsclientitiestriggers-li><input type=checkbox id=m-docsclientitiestriggers-check> |
| <label for=m-docsclientitiestriggers-check><a href=/docs/cli/entities/triggers/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsclientitiestriggers><span>Triggers</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsclientitiesrules-li><input type=checkbox id=m-docsclientitiesrules-check> |
| <label for=m-docsclientitiesrules-check><a href=/docs/cli/entities/rules/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsclientitiesrules><span>Rules</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docscliadmin-li><input type=checkbox id=m-docscliadmin-check> |
| <label for=m-docscliadmin-check><a href=/docs/cli/admin/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docscliadmin><span>Administration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsclidebug-li><input type=checkbox id=m-docsclidebug-check> |
| <label for=m-docsclidebug-check><a href=/docs/cli/debug/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsclidebug><span>Debugging</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docscliproject-li><input type=checkbox id=m-docscliproject-check> |
| <label for=m-docscliproject-check><a href=/docs/cli/project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docscliproject><span>Project</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docscliassets-li><input type=checkbox id=m-docscliassets-check> |
| <label for=m-docscliassets-check><a href=/docs/cli/assets/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docscliassets><span>Web Assets</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsreference-li><input type=checkbox id=m-docsreference-check checked> |
| <label for=m-docsreference-check><a href=/docs/reference/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreference><span>Reference</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferenceentities-li><input type=checkbox id=m-docsreferenceentities-check> |
| <label for=m-docsreferenceentities-check><a href=/docs/reference/entities/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceentities><span>Entities</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceentitiesactions-li><input type=checkbox id=m-docsreferenceentitiesactions-check> |
| <label for=m-docsreferenceentitiesactions-check><a href=/docs/reference/entities/actions/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceentitiesactions><span>Actions</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceentitieswebactions-li><input type=checkbox id=m-docsreferenceentitieswebactions-check> |
| <label for=m-docsreferenceentitieswebactions-check><a href=/docs/reference/entities/webactions/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceentitieswebactions><span>Web Actions</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceentitiesparameters-li><input type=checkbox id=m-docsreferenceentitiesparameters-check> |
| <label for=m-docsreferenceentitiesparameters-check><a href=/docs/reference/entities/parameters/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceentitiesparameters><span>Parameters</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceentitiesannotations-li><input type=checkbox id=m-docsreferenceentitiesannotations-check> |
| <label for=m-docsreferenceentitiesannotations-check><a href=/docs/reference/entities/annotations/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceentitiesannotations><span>Annotations</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceentitiespackages-li><input type=checkbox id=m-docsreferenceentitiespackages-check> |
| <label for=m-docsreferenceentitiespackages-check><a href=/docs/reference/entities/packages/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceentitiespackages><span>Packages</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceentitiesfeeds-li><input type=checkbox id=m-docsreferenceentitiesfeeds-check> |
| <label for=m-docsreferenceentitiesfeeds-check><a href=/docs/reference/entities/feeds/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceentitiesfeeds><span>Feeds</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsreferencereferences-li><input type=checkbox id=m-docsreferencereferences-check checked> |
| <label for=m-docsreferencereferences-check><a href=/docs/reference/references/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencereferences><span>Advanced Reference Guide</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencereferencesadvanced-cli-li><input type=checkbox id=m-docsreferencereferencesadvanced-cli-check> |
| <label for=m-docsreferencereferencesadvanced-cli-check><a href=/docs/reference/references/advanced-cli/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencereferencesadvanced-cli><span>Advanced CLI</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencereferencesnaming-limits-li><input type=checkbox id=m-docsreferencereferencesnaming-limits-check> |
| <label for=m-docsreferencereferencesnaming-limits-check><a href=/docs/reference/references/naming-limits/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencereferencesnaming-limits><span>Naming Limits</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencereferencesrest_api-li><input type=checkbox id=m-docsreferencereferencesrest_api-check> |
| <label for=m-docsreferencereferencesrest_api-check><a href=/docs/reference/references/rest_api/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencereferencesrest_api><span>Rest API</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencereferencesscheduler-li><input type=checkbox id=m-docsreferencereferencesscheduler-check> |
| <label for=m-docsreferencereferencesscheduler-check><a href=/docs/reference/references/scheduler/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencereferencesscheduler><span>Scheduler</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-docsreferencereferencesactions-new-li><input type=checkbox id=m-docsreferencereferencesactions-new-check checked> |
| <label for=m-docsreferencereferencesactions-new-check><a href=/docs/reference/references/actions-new/ class="align-left ps-0 active td-sidebar-link td-sidebar-link__section" id=m-docsreferencereferencesactions-new><span class=td-sidebar-nav-active-item>Runtimes under the hood</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencereferencesactions-actionloop-li><input type=checkbox id=m-docsreferencereferencesactions-actionloop-check> |
| <label for=m-docsreferencereferencesactions-actionloop-check><a href=/docs/reference/references/actions-actionloop/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencereferencesactions-actionloop><span>Building your runtime</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferenceruntimes-li><input type=checkbox id=m-docsreferenceruntimes-check> |
| <label for=m-docsreferenceruntimes-check><a href=/docs/reference/runtimes/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimes><span>Runtimes</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferenceruntimesnodejs-li><input type=checkbox id=m-docsreferenceruntimesnodejs-check> |
| <label for=m-docsreferenceruntimesnodejs-check><a href=/docs/reference/runtimes/nodejs/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesnodejs><span>NodeJS</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimesnodejsnodejsv18-li><input type=checkbox id=m-docsreferenceruntimesnodejsnodejsv18-check> |
| <label for=m-docsreferenceruntimesnodejsnodejsv18-check><a href=/docs/reference/runtimes/nodejs/nodejsv18/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesnodejsnodejsv18><span>nodejs:v18</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimesnodejsnodejsv20-li><input type=checkbox id=m-docsreferenceruntimesnodejsnodejsv20-check> |
| <label for=m-docsreferenceruntimesnodejsnodejsv20-check><a href=/docs/reference/runtimes/nodejs/nodejsv20/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesnodejsnodejsv20><span>nodejs:v20</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimesnodejsnodejsv21-li><input type=checkbox id=m-docsreferenceruntimesnodejsnodejsv21-check> |
| <label for=m-docsreferenceruntimesnodejsnodejsv21-check><a href=/docs/reference/runtimes/nodejs/nodejsv21/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesnodejsnodejsv21><span>nodejs:v21</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferenceruntimesphp-li><input type=checkbox id=m-docsreferenceruntimesphp-check> |
| <label for=m-docsreferenceruntimesphp-check><a href=/docs/reference/runtimes/php/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesphp><span>PHP</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimesphpphpv80-li><input type=checkbox id=m-docsreferenceruntimesphpphpv80-check> |
| <label for=m-docsreferenceruntimesphpphpv80-check><a href=/docs/reference/runtimes/php/phpv8.0/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesphpphpv80><span>php:v8.0</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimesphpphpv81-li><input type=checkbox id=m-docsreferenceruntimesphpphpv81-check> |
| <label for=m-docsreferenceruntimesphpphpv81-check><a href=/docs/reference/runtimes/php/phpv8.1/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesphpphpv81><span>php:v8.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimesphpphpv82-li><input type=checkbox id=m-docsreferenceruntimesphpphpv82-check> |
| <label for=m-docsreferenceruntimesphpphpv82-check><a href=/docs/reference/runtimes/php/phpv8.2/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesphpphpv82><span>php:v8.2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimesphpphpv83-li><input type=checkbox id=m-docsreferenceruntimesphpphpv83-check> |
| <label for=m-docsreferenceruntimesphpphpv83-check><a href=/docs/reference/runtimes/php/phpv8.3/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimesphpphpv83><span>php:v8.3</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferenceruntimespython-li><input type=checkbox id=m-docsreferenceruntimespython-check> |
| <label for=m-docsreferenceruntimespython-check><a href=/docs/reference/runtimes/python/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimespython><span>Python</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimespythonpythonv310-li><input type=checkbox id=m-docsreferenceruntimespythonpythonv310-check> |
| <label for=m-docsreferenceruntimespythonpythonv310-check><a href=/docs/reference/runtimes/python/pythonv3.10/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimespythonpythonv310><span>python:v3.10</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimespythonpythonv311-li><input type=checkbox id=m-docsreferenceruntimespythonpythonv311-check> |
| <label for=m-docsreferenceruntimespythonpythonv311-check><a href=/docs/reference/runtimes/python/pythonv3.11/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimespythonpythonv311><span>python:v3.11</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferenceruntimespythonpythonv312-li><input type=checkbox id=m-docsreferenceruntimespythonpythonv312-check> |
| <label for=m-docsreferenceruntimespythonpythonv312-check><a href=/docs/reference/runtimes/python/pythonv3.12/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferenceruntimespythonpythonv312><span>python:v3.12</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferencetasks-li><input type=checkbox id=m-docsreferencetasks-check> |
| <label for=m-docsreferencetasks-check><a href=/docs/reference/tasks/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasks><span>Tasks</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksadmin-li><input type=checkbox id=m-docsreferencetasksadmin-check> |
| <label for=m-docsreferencetasksadmin-check><a href=/docs/reference/tasks/admin/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksadmin><span>Admin</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferencetaskscloud-li><input type=checkbox id=m-docsreferencetaskscloud-check> |
| <label for=m-docsreferencetaskscloud-check><a href=/docs/reference/tasks/cloud/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloud><span>Cloud</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudaks-li><input type=checkbox id=m-docsreferencetaskscloudaks-check> |
| <label for=m-docsreferencetaskscloudaks-check><a href=/docs/reference/tasks/cloud/aks/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudaks><span>Aks</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudaws-li><input type=checkbox id=m-docsreferencetaskscloudaws-check> |
| <label for=m-docsreferencetaskscloudaws-check><a href=/docs/reference/tasks/cloud/aws/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudaws><span>Aws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudazcloud-li><input type=checkbox id=m-docsreferencetaskscloudazcloud-check> |
| <label for=m-docsreferencetaskscloudazcloud-check><a href=/docs/reference/tasks/cloud/azcloud/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudazcloud><span>Azcloud</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudeks-li><input type=checkbox id=m-docsreferencetaskscloudeks-check> |
| <label for=m-docsreferencetaskscloudeks-check><a href=/docs/reference/tasks/cloud/eks/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudeks><span>Eks</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudgcloud-li><input type=checkbox id=m-docsreferencetaskscloudgcloud-check> |
| <label for=m-docsreferencetaskscloudgcloud-check><a href=/docs/reference/tasks/cloud/gcloud/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudgcloud><span>Gcloud</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudgke-li><input type=checkbox id=m-docsreferencetaskscloudgke-check> |
| <label for=m-docsreferencetaskscloudgke-check><a href=/docs/reference/tasks/cloud/gke/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudgke><span>Gke</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudk3s-li><input type=checkbox id=m-docsreferencetaskscloudk3s-check> |
| <label for=m-docsreferencetaskscloudk3s-check><a href=/docs/reference/tasks/cloud/k3s/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudk3s><span>K3s</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudmk8s-li><input type=checkbox id=m-docsreferencetaskscloudmk8s-check> |
| <label for=m-docsreferencetaskscloudmk8s-check><a href=/docs/reference/tasks/cloud/mk8s/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudmk8s><span>Mk8s</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskscloudosh-li><input type=checkbox id=m-docsreferencetaskscloudosh-check> |
| <label for=m-docsreferencetaskscloudosh-check><a href=/docs/reference/tasks/cloud/osh/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskscloudosh><span>Osh</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksconfig-li><input type=checkbox id=m-docsreferencetasksconfig-check> |
| <label for=m-docsreferencetasksconfig-check><a href=/docs/reference/tasks/config/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksconfig><span>Config</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksdebug-li><input type=checkbox id=m-docsreferencetasksdebug-check> |
| <label for=m-docsreferencetasksdebug-check><a href=/docs/reference/tasks/debug/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksdebug><span>Debug</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferencetasksdevel-li><input type=checkbox id=m-docsreferencetasksdevel-check> |
| <label for=m-docsreferencetasksdevel-check><a href=/docs/reference/tasks/devel/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksdevel><span>Devel</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksdevelferretdb-li><input type=checkbox id=m-docsreferencetasksdevelferretdb-check> |
| <label for=m-docsreferencetasksdevelferretdb-check><a href=/docs/reference/tasks/devel/ferretdb/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksdevelferretdb><span>Ferretdb</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksdevelminio-li><input type=checkbox id=m-docsreferencetasksdevelminio-check> |
| <label for=m-docsreferencetasksdevelminio-check><a href=/docs/reference/tasks/devel/minio/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksdevelminio><span>Minio</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksdevelpsql-li><input type=checkbox id=m-docsreferencetasksdevelpsql-check> |
| <label for=m-docsreferencetasksdevelpsql-check><a href=/docs/reference/tasks/devel/psql/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksdevelpsql><span>Psql</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksdevelredis-li><input type=checkbox id=m-docsreferencetasksdevelredis-check> |
| <label for=m-docsreferencetasksdevelredis-check><a href=/docs/reference/tasks/devel/redis/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksdevelredis><span>Redis</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksenv-li><input type=checkbox id=m-docsreferencetasksenv-check> |
| <label for=m-docsreferencetasksenv-check><a href=/docs/reference/tasks/env/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksenv><span>Env</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskside-li><input type=checkbox id=m-docsreferencetaskside-check> |
| <label for=m-docsreferencetaskside-check><a href=/docs/reference/tasks/ide/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskside><span>Ide</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetaskssetup-li><input type=checkbox id=m-docsreferencetaskssetup-check> |
| <label for=m-docsreferencetaskssetup-check><a href=/docs/reference/tasks/setup/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetaskssetup><span>Setup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetasksutil-li><input type=checkbox id=m-docsreferencetasksutil-check> |
| <label for=m-docsreferencetasksutil-check><a href=/docs/reference/tasks/util/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetasksutil><span>Util</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsreferencetools-li><input type=checkbox id=m-docsreferencetools-check> |
| <label for=m-docsreferencetools-check><a href=/docs/reference/tools/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetools><span>Tools</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsbase64-li><input type=checkbox id=m-docsreferencetoolsbase64-check> |
| <label for=m-docsreferencetoolsbase64-check><a href=/docs/reference/tools/base64/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsbase64><span>base64</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsdatefmt-li><input type=checkbox id=m-docsreferencetoolsdatefmt-check> |
| <label for=m-docsreferencetoolsdatefmt-check><a href=/docs/reference/tools/datefmt/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsdatefmt><span>datefmt</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsechoif-li><input type=checkbox id=m-docsreferencetoolsechoif-check> |
| <label for=m-docsreferencetoolsechoif-check><a href=/docs/reference/tools/echoif/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsechoif><span>echoif</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsechoifempty-li><input type=checkbox id=m-docsreferencetoolsechoifempty-check> |
| <label for=m-docsreferencetoolsechoifempty-check><a href=/docs/reference/tools/echoifempty/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsechoifempty><span>echoifempty</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsechoifexists-li><input type=checkbox id=m-docsreferencetoolsechoifexists-check> |
| <label for=m-docsreferencetoolsechoifexists-check><a href=/docs/reference/tools/echoifexists/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsechoifexists><span>echoifexists</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsempty-li><input type=checkbox id=m-docsreferencetoolsempty-check> |
| <label for=m-docsreferencetoolsempty-check><a href=/docs/reference/tools/empty/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsempty><span>empty</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsexecutable-li><input type=checkbox id=m-docsreferencetoolsexecutable-check> |
| <label for=m-docsreferencetoolsexecutable-check><a href=/docs/reference/tools/executable/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsexecutable><span>executable</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsextract-li><input type=checkbox id=m-docsreferencetoolsextract-check> |
| <label for=m-docsreferencetoolsextract-check><a href=/docs/reference/tools/extract/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsextract><span>extract</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsfiletype-li><input type=checkbox id=m-docsreferencetoolsfiletype-check> |
| <label for=m-docsreferencetoolsfiletype-check><a href=/docs/reference/tools/filetype/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsfiletype><span>filetype</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsneedupdate-li><input type=checkbox id=m-docsreferencetoolsneedupdate-check> |
| <label for=m-docsreferencetoolsneedupdate-check><a href=/docs/reference/tools/needupdate/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsneedupdate><span>needupdate</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsopspath-li><input type=checkbox id=m-docsreferencetoolsopspath-check> |
| <label for=m-docsreferencetoolsopspath-check><a href=/docs/reference/tools/opspath/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsopspath><span>opspath</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsrandom-li><input type=checkbox id=m-docsreferencetoolsrandom-check> |
| <label for=m-docsreferencetoolsrandom-check><a href=/docs/reference/tools/random/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsrandom><span>random</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsremove-li><input type=checkbox id=m-docsreferencetoolsremove-check> |
| <label for=m-docsreferencetoolsremove-check><a href=/docs/reference/tools/remove/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsremove><span>remove</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsrename-li><input type=checkbox id=m-docsreferencetoolsrename-check> |
| <label for=m-docsreferencetoolsrename-check><a href=/docs/reference/tools/rename/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsrename><span>rename</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsretry-li><input type=checkbox id=m-docsreferencetoolsretry-check> |
| <label for=m-docsreferencetoolsretry-check><a href=/docs/reference/tools/retry/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsretry><span>retry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolssh-li><input type=checkbox id=m-docsreferencetoolssh-check> |
| <label for=m-docsreferencetoolssh-check><a href=/docs/reference/tools/sh/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolssh><span>sh</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsurlenc-li><input type=checkbox id=m-docsreferencetoolsurlenc-check> |
| <label for=m-docsreferencetoolsurlenc-check><a href=/docs/reference/tools/urlenc/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsurlenc><span>urlenc</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsreferencetoolsvalidate-li><input type=checkbox id=m-docsreferencetoolsvalidate-check> |
| <label for=m-docsreferencetoolsvalidate-check><a href=/docs/reference/tools/validate/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsreferencetoolsvalidate><span>validate</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsinstallation-li><input type=checkbox id=m-docsinstallation-check> |
| <label for=m-docsinstallation-check><a href=/docs/installation/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallation><span>Installation</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationquickstart-li><input type=checkbox id=m-docsinstallationquickstart-check> |
| <label for=m-docsinstallationquickstart-check><a href=/docs/installation/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationquickstart><span>Quick Start</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationdownload-li><input type=checkbox id=m-docsinstallationdownload-check> |
| <label for=m-docsinstallationdownload-check><a href=/docs/installation/download/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationdownload><span>Download</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsinstallationprereq-li><input type=checkbox id=m-docsinstallationprereq-check> |
| <label for=m-docsinstallationprereq-check><a href=/docs/installation/prereq/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereq><span>Prerequisites</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqdocker-li><input type=checkbox id=m-docsinstallationprereqdocker-check> |
| <label for=m-docsinstallationprereqdocker-check><a href=/docs/installation/prereq/docker/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqdocker><span>Local Docker</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsinstallationprereqserver-li><input type=checkbox id=m-docsinstallationprereqserver-check> |
| <label for=m-docsinstallationprereqserver-check><a href=/docs/installation/prereq/server/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqserver><span>Linux Server</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqservergeneric-li><input type=checkbox id=m-docsinstallationprereqservergeneric-check> |
| <label for=m-docsinstallationprereqservergeneric-check><a href=/docs/installation/prereq/server/generic/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqservergeneric><span>SSH and Sudo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqserveraws-li><input type=checkbox id=m-docsinstallationprereqserveraws-check> |
| <label for=m-docsinstallationprereqserveraws-check><a href=/docs/installation/prereq/server/aws/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqserveraws><span>Server on AWS</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqserverazure-li><input type=checkbox id=m-docsinstallationprereqserverazure-check> |
| <label for=m-docsinstallationprereqserverazure-check><a href=/docs/installation/prereq/server/azure/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqserverazure><span>Server on Azure</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqserverk3s-li><input type=checkbox id=m-docsinstallationprereqserverk3s-check> |
| <label for=m-docsinstallationprereqserverk3s-check><a href=/docs/installation/prereq/server/k3s/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqserverk3s><span>Install K3S</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqservermk8s-li><input type=checkbox id=m-docsinstallationprereqservermk8s-check> |
| <label for=m-docsinstallationprereqservermk8s-check><a href=/docs/installation/prereq/server/mk8s/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqservermk8s><span>Install MicroK8S</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsinstallationprereqkubernetes-li><input type=checkbox id=m-docsinstallationprereqkubernetes-check> |
| <label for=m-docsinstallationprereqkubernetes-check><a href=/docs/installation/prereq/kubernetes/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqkubernetes><span>Kubernetes Cluster</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqkuberneteseks-li><input type=checkbox id=m-docsinstallationprereqkuberneteseks-check> |
| <label for=m-docsinstallationprereqkuberneteseks-check><a href=/docs/installation/prereq/kubernetes/eks/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqkuberneteseks><span>Amazon EKS</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqkubernetesaks-li><input type=checkbox id=m-docsinstallationprereqkubernetesaks-check> |
| <label for=m-docsinstallationprereqkubernetesaks-check><a href=/docs/installation/prereq/kubernetes/aks/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqkubernetesaks><span>Azure AKS</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationprereqkubernetescluster-li><input type=checkbox id=m-docsinstallationprereqkubernetescluster-check> |
| <label for=m-docsinstallationprereqkubernetescluster-check><a href=/docs/installation/prereq/kubernetes/cluster/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationprereqkubernetescluster><span>Generic Kubernetes</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsinstallationconfigure-li><input type=checkbox id=m-docsinstallationconfigure-check> |
| <label for=m-docsinstallationconfigure-check><a href=/docs/installation/configure/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationconfigure><span>Configure OpenServerless</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationconfiguredns-li><input type=checkbox id=m-docsinstallationconfiguredns-check> |
| <label for=m-docsinstallationconfiguredns-check><a href=/docs/installation/configure/dns/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationconfiguredns><span>DNS and SSL</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationconfigureservices-li><input type=checkbox id=m-docsinstallationconfigureservices-check> |
| <label for=m-docsinstallationconfigureservices-check><a href=/docs/installation/configure/services/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationconfigureservices><span>Services</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsinstallationinstall-li><input type=checkbox id=m-docsinstallationinstall-check> |
| <label for=m-docsinstallationinstall-check><a href=/docs/installation/install/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationinstall><span>Install OpenServerless</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationinstalldocker-li><input type=checkbox id=m-docsinstallationinstalldocker-check> |
| <label for=m-docsinstallationinstalldocker-check><a href=/docs/installation/install/docker/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationinstalldocker><span>Docker</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationinstallserver-li><input type=checkbox id=m-docsinstallationinstallserver-check> |
| <label for=m-docsinstallationinstallserver-check><a href=/docs/installation/install/server/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationinstallserver><span>Linux Server</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationinstallcluster-li><input type=checkbox id=m-docsinstallationinstallcluster-check> |
| <label for=m-docsinstallationinstallcluster-check><a href=/docs/installation/install/cluster/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationinstallcluster><span>Kubernetes cluster</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsinstallationdebug-li><input type=checkbox id=m-docsinstallationdebug-check> |
| <label for=m-docsinstallationdebug-check><a href=/docs/installation/debug/ class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-docsinstallationdebug><span>Troubleshooting</span></a></label></li></ul></li></ul></li></ul></nav></div></aside><aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none"><div class="td-page-meta ms-2 pb-1 pt-2 mb-0"><a id=print href=/docs/reference/references/actions-new/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div><div class=td-toc><nav id=TableOfContents><ul><li><a href=#adding-action-language-runtimes>Adding Action Language Runtimes</a><ul><li><a href=#runtime-general-requirements>Runtime general requirements</a></li><li><a href=#the-runtimes-manifest>The runtimes manifest</a></li></ul></li><li><a href=#the-test-action>The test action</a></li><li><a href=#action-interface>Action Interface</a><ul><li><a href=#initialization>Initialization</a></li><li><a href=#activation>Activation</a></li><li><a href=#logging>Logging</a></li></ul></li><li><a href=#testing>Testing</a><ul><li><a href=#action-interface-tests>Action Interface tests</a></li><li><a href=#runtime-proxy-tests>Runtime proxy tests</a></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Docs</a></li><li class=breadcrumb-item><a href=/docs/reference/>Reference</a></li><li class=breadcrumb-item><a href=/docs/reference/references/>Advanced Reference Guide</a></li><li class="breadcrumb-item active" aria-current=page>Runtimes under the hood</li></ol></nav><div class=td-content><h1>Runtimes under the hood</h1><div class=lead>How to add new languages to your system</div><header class=article-meta></header><h2 id=adding-action-language-runtimes>Adding Action Language Runtimes</h2><p>OpenWhisk and OpenServerless supports <a href=/docs/reference/runtimes/>several languages and |
| runtimes</a> but there may be other languages or |
| runtimes that are important for your organization, and for which you |
| want tighter integration with the platform.</p><p>The platform is extensible and you can add new languages or runtimes |
| (with custom packages and third-party dependencies)</p><style>blockquote.warning{border-color:#b91900!important}blockquote.important{border-color:#e7c416!important}</style><blockquote class=info><p class=quote-title>💡 <strong>NOTE</strong></p><p>This guide describes the contract a runtime must satisfy. However all |
| the OpenServerless runtimes are implemented the <a href=/docs/reference/references/actions-actionloop/>using the ActionLoop |
| Proxy</a>. This proxy is implemented in Go, |
| already satifies the semantic of a runtime ands makes very easy to build |
| a new runtime. You just need to provide “launcher code” in your favorite |
| programming language and a compilation script (generally written in |
| python) for the initialization of an action. You are advised to use it |
| for your own runtimes and use the material of this document as reference |
| for the behaviour of a runtime.</p></blockquote><h3 id=runtime-general-requirements>Runtime general requirements</h3><p>The unit of execution for all functions is a <a href=https://docs.docker.com>Docker container</a> which must implement a specific |
| <a href=/docs/reference/references/actions-new/##action-interface>Action interface</a> that, in general performs:</p><ol><li><p><strong><a href=/docs/reference/references/actions-new/##initialization>Initialization</a></strong> - accepts an initialization |
| payload (the code) and prepared for execution,</p></li><li><p><strong><a href=/docs/reference/references/actions-new/##activation>Activation</a></strong> - accepts a runtime payload (the |
| input parameters) and</p><ul><li><p>prepares the activation context,</p></li><li><p>runs the function,</p></li><li><p>returns the function result,</p></li></ul></li><li><p><strong><a href=/docs/reference/references/actions-new/##logging>Logging</a></strong> - flushes all <code>stdout</code> and <code>stderr</code> logs |
| and adds a frame marker at the end of the activation.</p></li></ol><p>The specifics of the <a href=/docs/reference/references/actions-new/##action-interface>Action interface</a> and its |
| functions are shown below.</p><h3 id=the-runtimes-manifest>The runtimes manifest</h3><p>Actions when created specify the desired runtime for the function via a |
| property called <code>kind</code>. When using the <code>nuv</code> CLI, this is specified as |
| <code>--kind <runtime-kind></code>. The value is typically a string describing the |
| language (e.g., <code>nodejs</code>) followed by a colon and the version for the |
| runtime as in <code>nodejs:20</code> or <code>php:8.1</code>.</p><p>The manifest is a map of runtime family names to an array of specific |
| kinds. As an example, the following entry add a new runtime family |
| called <code>nodejs</code> with a single kind <code>nodejs:20</code>.</p><pre><code>{ |
| "nodejs": [{ |
| "kind": "nodejs:20", |
| "default": true, |
| "image": { |
| "prefix": "openwhisk", |
| "name": "action-nodejs-v20", |
| "tag": "latest" |
| } |
| }] |
| } |
| </code></pre><p>The <code>default</code> property indicates if the corresponding kind should be |
| treated as the default for the runtime family. The JSON <code>image</code> |
| structure defines the Docker image name that is used for actions of this |
| kind (e.g., <code>openwhisk/nodejs10action:latest</code> for the JSON example |
| above).</p><h2 id=the-test-action>The test action</h2><p>The standard test action is shown below in JavaScript. It should be |
| adapted for the new language and added to the <a href=../tests/dat/actions/unicode.tests>test artifacts |
| directory</a> with the name |
| <code><runtime-kind>.txt</code> for plain text file or <code><runtime-kind>.bin</code> for a a |
| binary file. The <code><runtime-kind></code> must match the value used for <code>kind</code> |
| in the corresponding runtime manifest entry, replacing <code>:</code> in the kind |
| with a <code>-</code>. For example, a plain text function for <code>nodejs:20</code> becomes |
| <code>nodejs-20.txt</code>.</p><pre><code>function main(args) { |
| var str = args.delimiter + " ☃ " + args.delimiter; |
| console.log(str); |
| return { "winter": str }; |
| } |
| </code></pre><h2 id=action-interface>Action Interface</h2><p>An action consists of the user function (and its dependencies) along |
| with a <em>proxy</em> that implements a canonical protocol to integrate with |
| the OpenWhisk and OpenServerless platform.</p><p>The proxy is a web server with two endpoints.</p><ul><li><p>It listens on port <code>8080</code>.</p></li><li><p>It implements <code>/init</code> to initialize the container.</p></li><li><p>It also implements <code>/run</code> to activate the function.</p></li></ul><p>The proxy also prepares the execution context, and flushes the logs |
| produced by the function to stdout and stderr.</p><h3 id=initialization>Initialization</h3><p>The initialization route is <code>/init</code>. It must accept a <code>POST</code> request |
| with a JSON object as follows:</p><pre><code>{ |
| "value": { |
| "name" : String, |
| "main" : String, |
| "code" : String, |
| "binary": Boolean, |
| "env": Map[String, String] |
| } |
| } |
| </code></pre><ul><li><p><code>name</code> is the name of the action.</p></li><li><p><code>main</code> is the name of the function to execute.</p></li><li><p><code>code</code> is either plain text or a base64 encoded string for binary |
| functions (i.e., a compiled executable).</p></li><li><p><code>binary</code> is false if <code>code</code> is in plain text, and true if <code>code</code> is |
| base64 encoded.</p></li><li><p><code>env</code> is a map of key-value pairs of properties to export to the |
| environment. And contains several properties starting with the |
| <code>__OW_</code> prefix that are specific to the running action.</p><ul><li><p><code>__OW_API_KEY</code> the API key for the subject invoking the action, |
| this key may be a restricted API key. This property is absent |
| unless explicitly |
| <a href=/docs/reference/references/actions-new/#annotations.adoc#annotations-for-all-actions>requested</a>.</p></li><li><p><code>__OW_NAMESPACE</code> the namespace for the <em>activation</em> (this may |
| not be the same as the namespace for the action).</p></li><li><p><code>__OW_ACTION_NAME</code> the fully qualified name of the running |
| action.</p></li><li><p><code>__OW_ACTION_VERSION</code> the internal version number of the running |
| action.</p></li><li><p><code>__OW_ACTIVATION_ID</code> the activation id for this running action |
| instance.</p></li><li><p><code>__OW_DEADLINE</code> the approximate time when this initializer will |
| have consumed its entire duration quota (measured in epoch |
| milliseconds).</p></li></ul></li></ul><p>The initialization route is called exactly once by the OpenWhisk and |
| OpenServerless platform, before executing a function. The route should report |
| an error if called more than once. It is possible however that a single |
| initialization will be followed by many activations (via <code>/run</code>). If an |
| <code>env</code> property is provided, the corresponding environment variables |
| should be defined before the action code is initialized.</p><p><strong>Successful initialization:</strong> The route should respond with <code>200 OK</code> if |
| the initialization is successful and the function is ready to execute. |
| Any content provided in the response is ignored.</p><p><strong>Failures to initialize:</strong> Any response other than <code>200 OK</code> is treated |
| as an error to initialize. The response from the handler if provided |
| must be a JSON object with a single field called <code>error</code> describing the |
| failure. The value of the error field may be any valid JSON value. The |
| proxy should make sure to generate meaningful log message on failure to |
| aid the end user in understanding the failure.</p><p><strong>Time limit:</strong> Every action in OpenWhisk and OpenServerless has a defined |
| time limit (e.g., 60 seconds). The initialization must complete within |
| the allowed duration. Failure to complete initialization within the |
| allowed time frame will destroy the container.</p><p><strong>Limitation:</strong> The proxy does not currently receive any of the |
| activation context at initialization time. There are scenarios where the |
| context is convenient if present during initialization. This will |
| require a change in the OpenWhisk and OpenServerless platform itself. Note |
| that even if the context is available during initialization, it must be |
| reset with every new activation since the information will change with |
| every execution.</p><h3 id=activation>Activation</h3><p>The proxy is ready to execute a function once it has successfully |
| completed initialization. The OpenWhisk and OpenServerless platform will |
| invoke the function by posting an HTTP request to <code>/run</code> with a JSON |
| object providing a new activation context and the input parameters for |
| the function. There may be many activations of the same function against |
| the same proxy (viz. container). Currently, the activations are |
| guaranteed not to overlap — that is, at any given time, there is at most |
| one request to <code>/run</code> from the OpenWhisk and OpenServerless platform.</p><p>The route must accept a JSON object and respond with a JSON object, |
| otherwise the OpenWhisk and OpenServerless platform will treat the activation |
| as a failure and proceed to destroy the container. The JSON object |
| provided by the platform follows the following schema:</p><pre><code>{ |
| "value": JSON, |
| "namespace": String, |
| "action_name": String, |
| "api_host": String, |
| "api_key": String, |
| "activation_id": String, |
| "transaction_id": String, |
| "deadline": Number |
| } |
| </code></pre><ul><li><p><code>value</code> is a JSON object and contains all the parameters for the |
| function activation.</p></li><li><p><code>namespace</code> is the OpenWhisk and OpenServerless namespace for the action |
| (e.g., <code>whisk-system</code>).</p></li><li><p><code>action_name</code> is the <a href=reference.md#fully-qualified-names>fully qualified |
| name</a> of the action.</p></li><li><p><code>activation_id</code> is a unique ID for this activation.</p></li><li><p><code>transaction_id</code> is a unique ID for the request of which this |
| activation is part of.</p></li><li><p><code>deadline</code> is the deadline for the function.</p></li><li><p><code>api_key</code> is the API key used to invoke the action.</p></li></ul><p>The <code>value</code> is the function parameters. The rest of the properties |
| become part of the activation context which is a set of environment |
| variables constructed by capitalizing each of the property names, and |
| prefixing the result with <code>__OW_</code>. Additionally, the context must define |
| <code>__OW_API_HOST</code> whose value is the OpenWhisk and OpenServerless API host. |
| This value is currently provided as an environment variable defined at |
| container startup time and hence already available in the context.</p><p><strong>Successful activation:</strong> The route must respond with <code>200 OK</code> if the |
| activation is successful and the function has produced a JSON object as |
| its result. The response body is recorded as the <a href=actions.md#understanding-the-activation-record>result of the |
| activation</a>.</p><p><strong>Failed activation:</strong> Any response other than <code>200 OK</code> is treated as an |
| activation error. The response from the handler must be a JSON object |
| with a single field called <code>error</code> describing the failure. The value of |
| the error field may be any valid JSON value. Should the proxy fail to |
| respond with a JSON object, the OpenWhisk and OpenServerless platform will |
| treat the failure as an uncaught exception. These two failures modes are |
| distinguished by the value of the <code>response.status</code> in the activation |
| record which is <code>application error</code> if the proxy returned an <code>error</code> |
| object, and <code>action developer error</code> otherwise.</p><p><strong>Time limit:</strong> Every action in OpenWhisk and OpenServerless has a defined |
| time limit (e.g., 60 seconds). The activation must complete within the |
| allowed duration. Failure to complete activation within the allowed time |
| frame will destroy the container.</p><h3 id=logging>Logging</h3><p>The proxy must flush all the logs produced during initialization and |
| execution and add a frame marker to denote the end of the log stream for |
| an activation. This is done by emitting the token |
| <code>XXX_THE_END_OF_A_WHISK_ACTIVATION_XXX</code> as the last log line for the |
| <code>stdout</code> <em>and</em> <code>stderr</code> streams. Failure to emit this marker will cause |
| delayed or truncated activation logs.</p><h2 id=testing>Testing</h2><h3 id=action-interface-tests>Action Interface tests</h3><p>The <a href=/docs/reference/references/actions-new/##action-interface>Action interface</a> is enforced via a canonical |
| test suite which validates the initialization protocol, the runtime |
| protocol, ensures the activation context is correctly prepared, and that |
| the logs are properly framed. Your runtime should extend this test |
| suite, and of course include additional tests as needed.</p><h3 id=runtime-proxy-tests>Runtime proxy tests</h3><p>The tests verify that the proxy can handle the following scenarios:</p><ul><li><p>Test the proxy can handle the identity functions (initialize and |
| run).</p></li><li><p>Test the proxy can handle pre-defined environment variables as well |
| as initialization parameters.</p></li><li><p>Test the proxy properly constructs the activation context.</p></li><li><p>Test the proxy can properly handle functions with Unicode |
| characters.</p></li><li><p>Test the proxy can handle large payloads (more than 1MB).</p></li><li><p>Test the proxy can handle an entry point other than <code>main</code>.</p></li><li><p>Test the proxy does not permit re-initialization.</p></li><li><p>Test the error handling for an action returning an invalid response.</p></li><li><p>Test the proxy when initialized with no content.</p></li></ul><p>The canonical test suite should be extended by the new runtime tests. |
| Additional tests will be required depending on the feature set provided |
| by the runtime.</p><p>Since the OpenWhisk and OpenServerless platform is language and runtime |
| agnostic, it is generally not necessary to add integration tests. That |
| is the unit tests verifying the protocol are sufficient. However, it may |
| be necessary in some cases to modify the <code>ops</code> CLI or other OpenWhisk |
| and OpenServerless clients. In which case, appropriate tests should be added |
| as necessary. The OpenWhisk and OpenServerless platform will perform a |
| generic integration test as part of its basic system tests. This |
| integration test will require a <a href=/docs/reference/references/actions-new/#the-test-action>test function</a> to be |
| available so that the test harness can create, invoke, and delete the |
| action.</p><div class=section-index></div><style>.feedback--answer{display:inline-block}.feedback--answer-no{margin-left:1em}.feedback--response{display:none;margin-top:1em}.feedback--response__visible{display:block}</style><div class=d-print-none><h2 class=feedback--title>Feedback</h2><p class=feedback--question>Was this page helpful?</p><button class="btn btn-primary mb-4 feedback--answer feedback--answer-yes">Yes</button> |
| <button class="btn btn-primary mb-4 feedback--answer feedback--answer-no">No</button><p class="feedback--response feedback--response-yes">Glad to hear it! Please <a href=https://github.com/USERNAME/REPOSITORY/issues/new>tell us how we can improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to hear that. Please <a href=https://github.com/USERNAME/REPOSITORY/issues/new>tell us how we can improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback--answer-yes"),noButton=document.querySelector(".feedback--answer-no"),yesResponse=document.querySelector(".feedback--response-yes"),noResponse=document.querySelector(".feedback--response-no"),disableButtons=()=>{yesButton.disabled=!0,noButton.disabled=!0},sendFeedback=e=>{if(typeof gtag!="function")return;gtag("event","page_helpful",{event_category:"Helpful",event_label:window.location.pathname,value:e})};yesButton.addEventListener("click",()=>{yesResponse.classList.add("feedback--response__visible"),disableButtons(),sendFeedback(100)}),noButton.addEventListener("click",()=>{noResponse.classList.add("feedback--response__visible"),disableButtons(),sendFeedback(0)})</script><br></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="disclaimer text-center"><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-2 order-sm-1"> </div><div class="td-footer__right col-6 col-sm-2 order-sm-3"> </div><div class="td-footer__center col-12 col-sm-8 py-2 order-sm-2"><p>Apache Openserverless™ is an effort undergoing incubation at The Apache Software Foundation (ASF), |
| sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a |
| further review indicates that the infrastructure, communications, and decision making process |
| have stabilized in a manner consistent with other successful ASF projects. While incubation |
| status is not necessarily a reflection of the completeness or stability of the code, it does |
| indicate that the project has yet to be fully endorsed by the ASF.</p><br><br><p>Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. |
| Apache Openserverless, the names of other Apache projects, and the ASF logo are either |
| registered trademarks or trademarks of the Apache Software Foundation in the United States |
| and/or other countries.</p></div></div><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"> </div><div class="td-footer__right col-6 col-sm-4 order-sm-3"> </div><div class="td-footer__center col-12 col-sm-4 py-2 order-sm-2"><a href=https://www.apache.org/><img class="asf-logo rounded-image" src=/images/asf.webp width=256 height=104> |
| </a><a href=https://incubator.apache.org/projects/openserverless.html><img class="asf-logo rounded-image" src=/images/apache_incubator.webp width=256 height=104></a></div></div></div></div><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title="Developer mailing list" aria-label="Developer mailing list"><a target=_blank rel=noopener href=mailto:dev-subscribe@openserverless.apache.org aria-label="Developer mailing list"><i class="fa fa-envelope"></i></a></li><li class=td-footer__links-item data-bs-toggle=tooltip title=X.com aria-label=X.com><a target=_blank rel=noopener href=https://x.com/open_serverless aria-label=X.com><i class="fab fa-x-twitter"></i></a></li><li class=td-footer__links-item data-bs-toggle=tooltip title=Reddit aria-label=Reddit><a target=_blank rel=noopener href=https://reddit.com/r/openserverless aria-label=Reddit><i class="fab fa-reddit"></i></a></li></ul></div><div class="td-footer__right col-6 col-sm-4 order-sm-3"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=GitHub aria-label=GitHub><a target=_blank rel=noopener href=https://github.com/apache/openserverless aria-label=GitHub><i class="fab fa-github"></i></a></li><li class=td-footer__links-item data-bs-toggle=tooltip title=Discord aria-label=Discord><a target=_blank rel=noopener href=https://discord.com/invite/PkD7CcHgGP aria-label=Discord><i class="fab fa-discord"></i></a></li><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://the-asf.slack.com/archives/C07B6K5R3F0 aria-label=Slack><i class="fab fa-slack"></i></a></li></ul></div><div class="td-footer__center col-12 col-sm-4 py-2 order-sm-2"><span class=td-footer__copyright>© |
| 2024–2025 |
| <span class=td-footer__authors>The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</span></span><span class=td-footer__all_rights_reserved>All Rights Reserved</span></div></div></div></footer><div id=theme-toggler-container><button id=theme-toggler class="btn btn-light-dark" aria-label="Toggle theme"> |
| <span id=theme-icon class="fa fa-sun"></span></button></div><script>const themeToggler=document.getElementById("theme-toggler"),themeIcon=document.getElementById("theme-icon"),currentTheme=localStorage.getItem("theme")||"light";themeToggler.addEventListener("click",()=>{document.documentElement.classList.toggle("dark-mode");const e=document.documentElement.classList.contains("dark-mode");themeIcon.classList.toggle("fa-sun",!e),themeIcon.classList.toggle("fa-moon",e),localStorage.setItem("theme",e?"dark":"light")})</script><style>#theme-toggler-container{position:fixed;bottom:70px;right:20px;z-index:1000}.btn-light-dark{background:#fff;border:1px solid #ddd;border-radius:50%;width:50px;height:50px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 6px rgba(0,0,0,.1);cursor:pointer;transition:background-color .3s,transform .2s}.btn-light-dark:hover{background:#f0f0f0;transform:scale(1.1)}.dark-mode .btn-light-dark{background:#333;color:#fff;border-color:#444}</style></div><script src=/js/main.min.90902a026ed2aee7ed45d85797f4c790b240ba148ac6f8a6f194cb1981ffecf5.js integrity="sha256-kJAqAm7SruftRdhXl/THkLJAuhSKxvim8ZTLGYH/7PU=" crossorigin=anonymous></script><script src=/js/prism.js></script><script src=/js/tabpane-persist.js></script></body></html> |