PageSourceSearch

https://pkl-lang.org/

html pkl-lang.org collected 2026-09-24 18:03:25 UTC 19,401 bytes, 466 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4        <meta charset="utf-8">
5    <meta name="viewport" content="width=device-width,initial-scale=1">
6    <title>Pkl :: Pkl Docs</title>
7    <link rel="canonical" href="https://pkl-lang.org/index.html">
8    <link rel="next" href="community.html">
9    <meta name="generator" content="Antora 3.1.15">
10    <link rel="stylesheet" href="./_/css/site.css">
11<link rel="stylesheet" href="./_/css/theme-vars.css">
12<link rel="stylesheet" href="./_/css/theme-switch.css">
13<link rel="stylesheet" href="./_/css/site-extra.css">
14<link rel="stylesheet" href="./_/css/search.css">
15<link rel="stylesheet" href="./_/css/syntax-highlights.css">
16<link rel="stylesheet" href="./_/css/vendor/tabs.css">
17<link rel="icon" type="image/svg+xml" href="./_/img/favicon.svg">
18<link rel="apple-touch-icon" sizes="180x180" href="./_/img/apple-touch-icon.png">
19<link rel="icon" type="image/png" sizes="32x32" href="./_/img/favicon-32x32.png">
20<link rel="icon" type="image/png" sizes="16x16" href="./_/img/favicon-16x16.png">
21<script src="./_/js/theme-switcher.js"></script>
21
22    <link rel="stylesheet" href="./_/css/landing.css">
23</head>
24<body>
25    <header class="header">
26  <nav class="navbar navbar-top">
27    <div class="navbar-brand">
28      <div class="navbar-item">
29        <a href="./index.html"><img src="./_/img/favicon.svg" alt="Pkl" height="35" width="35"/></a>
30        <a href="./index.html">Pkl</a>
31      </div>
32      <button class="navbar-burger" aria-controls="topbar-nav" aria-expanded="false" aria-label="Toggle main menu">
33          <span></span>
34          <span></span>
35          <span></span>
36      </button>
37    </div>
38    <div id="topbar-nav" class="navbar-menu">
39      <div class="navbar-item search hide-for-print">
40        <div id="search-field" class="field">
41          <input id="search-input" type="text" placeholder="Enter Search Term" autofocus>
42        </div>
43      </div>
44      <div class="navbar-end">
45        <a class="navbar-item" href="./main/current/index.html">Language</a>
46        <div class="navbar-item has-dropdown is-hoverable">
47          <a href="./main/current/language-bindings.html" class="navbar-link">Bindings</a>
48          <div class="navbar-dropdown">
49            <a class="navbar-item" href="./main/current/java-binding/index.html">Java</a>
50            <a class="navbar-item" href="./main/current/kotlin-binding/index.html">Kotlin</a>
51            <a class="navbar-item" href="./swift/current/index.html">Swift</a>
52            <a class="navbar-item" href="./go/current/index.html">Go</a>
53          </div>
54        </div>
55        <div class="navbar-item has-dropdown is-hoverable">
56          <a href="./main/current/integrations.html" class="navbar-link">Frameworks</a>
57          <div class="navbar-dropdown">
58            <a class="navbar-item" href="./spring/current/index.html">Spring (Boot)</a>
59          </div>
60        </div>
61        <div class="navbar-item has-dropdown is-hoverable">
62          <a href="./main/current/tools.html" class="navbar-link">Editors</a>
63          <div class="navbar-dropdown">
64            <a class="navbar-item" href="./intellij/current/index.html">IntelliJ</a>
65            <a class="navbar-item" href="./neovim/current/index.html">Neovim</a>
66            <a class="navbar-item" href="./vscode/current/index.html">VS Code</a>
67            <a class="navbar-item" href="./lsp/current/index.html">Pkl Language Server</a>
68          </div>
69        </div>
70        <div class="navbar-item has-dropdown is-hoverable">
71          <a href="./main/current/resources.html" class="navbar-link">Resources</a>
72          <div class="navbar-dropdown">
73            <a class="navbar-item" href="https://github.com/apple/pkl">GitHub</a>
74            <a class="navbar-item" href="https://pkl-lang.org/package-docs/pkl/current/index.html">Standard Library</a>
75            <a class="navbar-item" href="https://pkl-lang.org/package-docs/">Package Docs</a>
76            <a class="navbar-item" href="./main/current/style-guide/index.html">Style Guide</a>
77            <a class="navbar-item" href="./security.html">Security</a>
78          </div>
79        </div>
80        <div class="navbar-item has-dropdown is-hoverable">
81          <a href="./community.html" class="navbar-link">Community</a>
82          <div class="navbar-dropdown is-right">
83            <a class="navbar-item" href="https://github.com/apple/pkl/discussions" target="_blank">GitHub Discussions</a>
84            <a class="navbar-item" href="./blog/index.html">Blog</a>
85          </div>
86        </div>
87      </div>
88    </div>
89  </nav>
90</header>
91    <div class="exampleblock container-land">
92<div class="content">
93<div class="header-spacer"></div>
94<div class="exampleblock hero-big">
95<div class="content">
96<div class="exampleblock title">
97<div class="content">
98<div class="paragraph">
99<p>Configuration that is <strong>Programmable</strong>, <strong>Scalable</strong>, and <strong>Safe</strong></p>
100</div>
101<div class="hero-actions">
102<!--<a href="main/current/language-tutorial/index.html" class="xref page">Get Started</a>-->
103<a href="main/current/pkl-cli/index.html#installation" class="xref page">Install</a>
104</div>
105</div>
106</div>
107<div class="separator"></div>
108</div>
109</div>
110<div class="hero-duo">
111<div class="exampleblock doc">
112<div class="content">
113<div class="listingblock">
114<div class="title">bird.pkl</div>
115<div class="content">
116<pre class="highlightjs highlight"><code class="language-pkl hljs" data-lang="pkl"><span class="hljs-property">
116name</span> <span class="hljs-operator">=</span> <span class="hljs-string">&quot;Swallow&quot;</span>
117
118<span class="hljs-property">job</span> <span class="hljs-punctuation">{</span>
119  <span class="hljs-property">title</span> <span class="hljs-operator">=</span> <span class="hljs-string">&quot;Sr. Nest Maker&quot;</span>
120  <span class="hljs-property">company</span> <span class="hljs-operator">=</span> <span class="hljs-string">&quot;Nests R Us&quot;</span>
121  <span class="hljs-property">yearsOfExperience</span> <span class="hljs-operator">=</span> <span class="hljs-number">2</span>
122<span class="hljs-punctuation">}</span></code></pre>
123</div>
124</div>
125<div class="paragraph hero-arrow">
126<p>↓</p>
127</div>
128<div role="tablist" class="automatic">
129  <button id="tab-1" type="button" role="tab" aria-selected="true" aria-controls="tabpanel-1">
130    <span>bird.json</span>
131  </button><button id="tab-2" type="button" role="tab" aria-selected="false" aria-controls="tabpanel-2">
132    <span>bird.yaml</span>
133  </button><button id="tab-3" type="button" role="tab" aria-selected="false" aria-controls="tabpanel-3">
134    <span>bird.plist</span>
135  </button><button id="tab-4" type="button" role="tab" aria-selected="false" aria-controls="tabpanel-4">
136    <span>bird.properties</span>
137  </button>
138</div>
139<div id="tabpanel-1" role="tabpanel" tabindex="0" aria-labelledby="tab-1">
140<div class="listingblock">
141<div class="content">
142<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
143  "name": "Swallow",
144  "job": {
145    "title": "Sr. Nest Maker",
146    "company": "Nests R Us",
147    "yearsOfExperience": 2
148  }
149}</code></pre>
150</div>
151</div>
152</div>
153<div id="tabpanel-2" role="tabpanel" tabindex="0" aria-labelledby="tab-2" class="is-hidden">
154<div class="listingblock">
155<div class="content">
156<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">name: Swallow
157job:
158  title: Sr. Nest Maker
159  company: Nests R Us
160  yearsOfExperience: 2</code></pre>
161</div>
162</div>
163</div>
164<div id="tabpanel-3" role="tabpanel" tabindex="0" aria-labelledby="tab-3" class="is-hidden">
165<div class="listingblock">
166<div class="content">
167<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
168&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
169&lt;plist version="1.0"&gt;
170&lt;dict&gt;
171  &lt;key&gt;name&lt;/key&gt;
172  &lt;string&gt;Swallow&lt;/string&gt;
173  &lt;key&gt;job&lt;/key&gt;
174  &lt;dict&gt;
175    &lt;key&gt;title&lt;/key&gt;
176    &lt;string&gt;Sr. Nest Maker&lt;/string&gt;
177    &lt;key&gt;company&lt;/key&gt;
178    &lt;string&gt;Nests R Us&lt;/string&gt;
179    &lt;key&gt;yearsOfExperience&lt;/key&gt;
180    &lt;integer&gt;2&lt;/integer&gt;
181  &lt;/dict&gt;
182&lt;/dict&gt;
183&lt;/plist&gt;</code></pre>
184</div>
185</div>
186</div>
187<div id="tabpanel-4" role="tabpanel" tabindex="0" aria-labelledby="tab-4" class="is-hidden">
188<div class="listingblock">
189<div class="content">
190<pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">name = Swallow
191job.title = Sr. Nest Maker
192job.company = Nests R Us
193job.yearsOfExperience = 2</code></pre>
194</div>
195</div>
196</div>
197</div>
198</div>
199<div class="exampleblock doc">
200<div class="content">
201<div class="openblock hero-title">
202<div class="content">
203<div class="paragraph">
204<p>Generate any static configuration format</p>
205</div>
206</div>
207</div>
208<div class="paragraph">
209<p>Define all your data in Pkl, and generate output for JSON, YAML, Property Lists, and other
210configuration formats.</p>
211</div>
212</div>
213</div>
214</div>
215<div class="hero-duo secondary">
216<div class="exampleblock doc">
217<div class="content">
218<div class="openblock hero-title">
219<div class="content">
220<div class="paragraph">
221<p>Integrated application configuration</p>
222</div>
223</div>
224</div>
225<div class="paragraph">
226<p>Embed Pkl into your applications for runtime configuration, and receive code generation for
227<strong>Java</strong>, <strong>Kotlin</strong>, <strong>Swift</strong>, and <strong>Go</strong>.</p>
228</div>
229<div class="paragraph logos">
230<p><span class="image"><img src="_images/java_logo.svg" alt="java logo"></span> <span class="image"><img src="_images/kotlin_logo.svg" alt="kotlin logo"></span> <span class="image"><img src="_images/swift_logo.svg" alt="swift logo"></span> <span class="image"><img src="_images/go_logo.svg" alt="go logo"></span></p>
231</div>
232</div>
233</div>
234<div class="exampleblock doc">
235<div class="content">
236<div role="tablist" class="automatic">
237  <button id="tab2-1" type="button" role="tab" aria-selected="true" aria-controls="tabpanel2-1">
238    <span>Pkl</span>
239  </button>
240  <button id="tab2-2" type="button" role="tab" aria-selected="false" aria-controls="tabpanel2-2">
241    <span>Java</span>
242  </button>
243  <button id="tab2-3" type="button" role="tab" aria-selected="false" aria-controls="tabpanel2-3">
244    <span>Kotlin</span>
245  </button>
246  <button id="tab2-4" type="button" role="tab" aria-selected="false" aria-controls="tabpanel2-4">
247    <span>
247Swift</span>
248  </button>
249  <button id="tab2-5" type="button" role="tab" aria-selected="false" aria-controls="tabpanel2-5">
250    <span>Go</span>
251  </button>
252</div>
253<div id="tabpanel2-1" role="tabpanel" tabindex="0" aria-labelledby="tab2-1">
254<div class="listingblock">
255<div class="content">
256<pre class="highlightjs highlight"><code class="language-pkl hljs" data-lang="pkl"><span class="hljs-keyword">module</span> example<span class="hljs-punctuation">.</span><span class="hljs-title class_">MyAppConfig</span>
257
258<span class="hljs-comment">/// The hostname for the application</span>
259<span class="hljs-property">host</span><span class="hljs-punctuation">:</span> <span class="hljs-title class_">String</span>
260
261<span class="hljs-comment">/// The port to listen on</span>
262<span class="hljs-property">port</span><span class="hljs-punctuation">:</span> <span class="hljs-title class_">UInt16</span><span class="hljs-punctuation">(</span><span class="hljs-keyword">this</span> <span class="hljs-operator">&gt;</span> <span class="hljs-number">1000</span><span class="hljs-punctuation">)</span></code></pre>
263</div>
264</div>
265</div>
266<div id="tabpanel2-2" role="tabpanel" tabindex="0" aria-labelledby="tab2-2" class="is-hidden">
267<div class="listingblock">
268<div class="content">
269<pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">package example;
270
271public final class MyAppConfig {
272  /**
273   * The hostname for the application
274   */
275  public final @NonNull String host;
276
277  /**
278   * The port to listen on
279   */
280  public final int port;
281
282  public MyAppConfig(
283        @Named("host") @NonNull String host,
284        @Named("port") int port) {
285    this.host = host;
286    this.port = port;
287  }
288
289  public MyAppConfig withHost(@NonNull String host) { /*...*/ }
290
291  public MyAppConfig withPort(int port) { /*...*/ }
292
293  @Override
294  public boolean equals(Object obj) { /*...*/ }
295
296  @Override
297  public int hashCode() { /*...*/ }
298
299  @Override
300  public String toString() { /*...*/ }
301}</code></pre>
302</div>
303</div>
304</div>
305<div id="tabpanel2-3" role="tabpanel" tabindex="0" aria-labelledby="tab2-3" class="is-hidden">
306<div class="listingblock">
307<div class="content">
308<pre class="highlightjs highlight"><code class="language-kotlin hljs" data-lang="kotlin">package example
309
310data class MyAppConfig(
311  /**
312   * The hostname for the application
313   */
314  val host: String,
315  /**
316   * The port to listen on
317   */
318  val port: Int
319)</code></pre>
320</div>
321</div>
322</div>
323<div id="tabpanel2-4" role="tabpanel" tabindex="0" aria-labelledby="tab2-4" class="is-hidden">
324<div class="listingblock">
325<div class="content">
326<pre class="highlightjs highlight"><code class="language-swift hljs" data-lang="swift">// Code generated from Pkl module `example.myAppConfig`. DO NOT EDIT.
327enum MyAppConfig {}
328
329extension MyAppConfig {
330    struct Module {
331        /// The hostname for the application
332        let host: String
333
334        /// The port to listen on
335        let port: UInt16
336    }
337}</code></pre>
338</div>
339</div>
340</div>
341<div id="tabpanel2-5" role="tabpanel" tabindex="0" aria-labelledby="tab2-5" class="is-hidden">
342<div class="listingblock">
343<div class="content">
344<pre class="highlightjs highlight"><code class="language-go hljs" data-lang="go">// Code generated from Pkl module `example.myAppConfig`. DO NOT EDIT.
345package myappconfig
346
347import (
348	"context"
349
350	"github.com/apple/pkl-go/pkl"
351)
352
353type MyAppConfig struct {
354	// The hostname for the application
355	Host string `pkl:"host"`
356
357	// The port to listen on
358	Port uint16 `pkl:"port"`
359}</code></pre>
360</div>
361</div>
362</div>
363</div>
364</div>
365</div>
366<div class="hero-duo">
367<div class="exampleblock doc">
368<div class="content">
369<div class="imageblock">
370<div class="content">
371<img src="_images/intellij.gif" alt="intellij">
372</div>
373</div>
374</div>
375</div>
376<div class="exampleblock doc">
377<div class="content">
378<div class="openblock hero-title">
379<div class="content">
380<div class="paragraph">
381<p>Incredible IDE Integration</p>
382</div>
383</div>
384</div>
385<div class="paragraph">
386<p>Great tooling for writing Pkl with the same ease as a static typed language. We offer plugins and extensions for IntelliJ,
387Visual Studio Code, and Neovim, and also provide the Pkl Language Server so you can easily create your own editor integrations.</p>
388</div>
389</div>
390</div>
391</div>
392<div class="hero-duo secondary">
393<div class="exampleblock doc">
394<div class="content">
395<div class="openblock hero-title">
396<div class="content">
397<div class="paragraph">
398<p>Catch errors before deployment</p>
399</div>
400</div>
401</div>
402<div class="paragraph">
403<p>With a rich type and validation system, catch configuration errors before deploying your application.</p>
404</div>
405</div>
406</div>
407<div class="exampleblock doc">
408<div class="content">
409<div class="listingblock">
410<div class="content">
411<pre class="highlightjs highlight"><code class="language-pkl hljs" data-lang="pkl"><span class="hljs-property">email</span><span class="hljs-punctuation">:</span> <span class="hljs-title class_">String</span> <span class="hljs-operator">=</span> <span class="hljs-string">&quot;[email protected]&quot;</span>
412
413<span class="hljs-property">port</span><span class="hljs-punctuation">:</span> <span class="hljs-title class_">Int</span><span class="hljs-punctuation">(</span><span class="hljs-keyword">this</span> <span class="hljs-operator">&gt;</span> <span class="hljs-number">1000</span><span class="hljs-punctuation">)</span> <span class="hljs-operator">=</span> <span class="hljs-number">80</span></code></pre>
414</div>
415</div>
416<div class="paragraph hero-arrow">
417<p>↓</p>
418</div>
419<div class="listingblock">
420<div class="content">
421<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text"><span style="color:var(--ansi-red, #cc0000);">–– Pkl Error ––</span>
422<span style="color:var(--ansi-red, #cc0000);font-weight:var(--ansi-bold-font-weight, 600);">Type constraint `this &gt; 1000` violated.
423Value: 80
424
425</span>    this &gt; 1000
426    <span style="opacity:var(--ansi-dim-opacity, 0.7);">│</span>    <span style="opacity:var(--ansi-dim-opacity, 0.7);">│</span>
427    <span style="color:var(--ansi-green, #4e9a06);">80</span>   <span style="color:var(--ansi-cyan, #06989a);">
427false</span><span style="color:var(--ansi-red, #cc0000);font-weight:var(--ansi-bold-font-weight, 600);"></span>
428
429<span style="color:var(--ansi-yellow, #c4a000);"></span><span style="opacity:var(--ansi-dim-opacity, 0.7);">3 | </span>port: Int(<span style="color:var(--ansi-blue, #3465a4);">this</span> &gt; <span style="color:var(--ansi-green, #4e9a06);">1000</span>) = <span style="color:var(--ansi-green, #4e9a06);">80</span>
430<span style="color:var(--ansi-yellow, #c4a000);"></span>              <span style="color:var(--ansi-red, #cc0000);">^^^^^^^^^^^</span>
431<span style="color:var(--ansi-yellow, #c4a000);"></span><span style="opacity:var(--ansi-dim-opacity, 0.7);">at config#port (file:///config.pkl, line 3</span><span style="opacity:var(--ansi-dim-opacity, 0.7);">)
432</span><span style="color:var(--ansi-yellow, #c4a000);"></span>
433<span style="color:var(--ansi-yellow, #c4a000);"></span><span style="opacity:var(--ansi-dim-opacity, 0.7);">3 | </span>port: Int(<span style="color:var(--ansi-blue, #3465a4);">this</span> &gt; <span style="color:var(--ansi-green, #4e9a06);">1000</span>) = <span style="color:var(--ansi-green, #4e9a06);">80</span>
434<span style="color:var(--ansi-yellow, #c4a000);"></span>                             <span style="color:var(--ansi-red, #cc0000);">^^</span>
435<span style="color:var(--ansi-yellow, #c4a000);"></span><span style="opacity:var(--ansi-dim-opacity, 0.7);">at config#port (file:///config.pkl, line 3</span><span style="opacity:var(--ansi-dim-opacity, 0.7);">)
436</span><span style="color:var(--ansi-yellow, #c4a000);"></span>
437<span style="color:var(--ansi-yellow, #c4a000);"></span><span style="opacity:var(--ansi-dim-opacity, 0.7);">131 | </span>renderer.renderDocument(value)
438<span style="color:var(--ansi-yellow, #c4a000);"></span>      <span style="color:var(--ansi-red, #cc0000);">^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</span>
439<span style="color:var(--ansi-yellow, #c4a000);"></span><span style="opacity:var(--ansi-dim-opacity, 0.7);">at pkl.base#Module.output.text
440</span></code></pre>
441</div>
442</div>
443</div>
444</div>
445</div>
446</div>
447</div>
448    <footer class="footer">
449  <div class="footer-content">
450    <p>Copyright © 2024-2025 Apple Inc. All rights reserved.</p>
451    <div class="theme-selector">
452      <label for="theme-select">Theme</label>
453      <select id="theme-select" class="theme-dropdown">
454        <option value="system">💻 System</option>
455        <option value="light">☀️ Light</option>
456        <option value="dark">🌙 Dark</option>
457      </select>
458    </div>
459  </div>
460</footer>
461    
461<script src="./_/js/site.js"></script>
vendor: 1 bytes, line 461
461
462<script src="./_/js/site-support.js"></script>
vendor: 1 bytes, line 462
462
463<script async src="./_/js/vendor/highlight.js"></script>
vendor: 1 bytes, line 463
463
464<script src="./_/js/landing-page-support.js"></script>
464
465</body>
466</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.