<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Peter&#x27;s Path - Development</title>
      <link>https://peterspath.net</link>
      <description>Peter&#x27;s Path is my personal endeavour to live a life of purpose through hiking, reading, and embracing the beauty of nature, faith, and ideas.</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://peterspath.net/categories/development/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Fri, 06 Mar 2026 17:00:00 +0000</lastBuildDate>
      <item>
          <title>Swift at scale: building the TelemetryDeck analytics service</title>
          <pubDate>Fri, 06 Mar 2026 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-building-privacy-first-analytics-with-swift/</link>
          <guid>https://peterspath.net/blog/dev-building-privacy-first-analytics-with-swift/</guid>
          <description xml:base="https://peterspath.net/blog/dev-building-privacy-first-analytics-with-swift/">&lt;blockquote&gt;
&lt;p&gt;The decision to go with Swift brought a lot of unexpected advantages for us. We come from a world of iOS in the frontend, Python, Node, or Ruby in the backend for server-based applications. Compared to these languages and frameworks, Swift is just as easy to use, and its compiled nature allows us to catch a lot of possible errors at compile time instead of runtime, making it ideal for a hardened, high-performance web service.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;building-privacy-first-analytics-with-swift&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;building-privacy-first-analytics-with-swift&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;TelemetryDeck is an analytics service for app developers. It focuses on privacy. It anonymises data and makes tracking easy.&lt;&#x2F;p&gt;
&lt;p&gt;The service handles data from millions of users each month. It helps thousands of app makers improve their products. The backend uses Swift. They chose Swift and the Vapor framework for the server. This choice brought benefits. Swift catches errors at compile time. It performs well with many threads. It handles high loads with low costs.&lt;&#x2F;p&gt;
&lt;p&gt;They store metadata in Postgres and analytics data in Apache Druid. They use Swift tools to connect to these. At first, they picked Swift because they liked it. It led to a fast, stable system. They can develop quickly. Swift&#x27;s Codable makes JSON handling safe and simple. It rejects bad data right away. This improves security. Development feels good in Xcode. They run tests, debug, and use local databases. This helps new team members start fast.&lt;&#x2F;p&gt;
&lt;p&gt;Lessons include: Structure code with Swift packages. Databases often cause slowdowns, not Swift code. Use Vapor&#x27;s built-in tools. Version APIs from the start. Set cache timeouts. Monitor errors yourself.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>E2EE Backend part 3: Passkeys with the PRF Extension</title>
          <pubDate>Sun, 01 Mar 2026 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-e2ee-backend-part-3-passkeys-with-the-prf-extension/</link>
          <guid>https://peterspath.net/blog/dev-e2ee-backend-part-3-passkeys-with-the-prf-extension/</guid>
          <description xml:base="https://peterspath.net/blog/dev-e2ee-backend-part-3-passkeys-with-the-prf-extension/">&lt;p&gt;This is the third post in a series on building a truly privacy-preserving, end-to-end encrypted backend and client.&lt;&#x2F;p&gt;
&lt;p&gt;The goal of this part is user-friendly key management. We do that by using Passkeys with the PRF extension to create a deterministic encryption key.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;&#x2F;h3&gt;
&lt;p&gt;End-to-end encryption needs a strong key on the client. The server must never see it. Old solutions either stored keys on the server or asked users to remember extra passwords. Both are bad.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Passkeys&lt;&#x2F;strong&gt; solve authentication. They use Face ID or Touch ID and work across devices.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;strong&gt;PRF extension&lt;&#x2F;strong&gt; (Pseudo-Random Function) adds the missing piece. It lets the client create a deterministic encryption key from the Passkey itself. The server stores only a salt. The key stays on the device and never leaves the Secure Enclave.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-passkeys-improve-security&quot;&gt;How Passkeys Improve Security&lt;&#x2F;h3&gt;
&lt;p&gt;Passkeys use public key cryptography. The device holds the private key. The server holds only the matching public key. No shared secret travels across the internet.&lt;&#x2F;p&gt;
&lt;p&gt;This design stops phishing. A Passkey is bound to one exact domain. The browser and operating system check the website address before they allow the Passkey to work. If you land on a fake site, even a perfect copy, the Passkey will not activate. The private key never leaves your device. An attacker cannot steal it by tricking you into typing something. Passkeys also resist reuse. Each Passkey works only for its registered service. Attackers cannot take a Passkey from one site and use it on another.&lt;&#x2F;p&gt;
&lt;p&gt;Passkeys remove other common risks too. There is no password to guess, reuse, or leak in a breach. Biometric checks such as Face ID or Touch ID add another layer. The device must confirm it is really you before it signs the challenge.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-demo-passkey-login-instant-encryption&quot;&gt;The Demo: Passkey Login + Instant Encryption&lt;&#x2F;h3&gt;
&lt;p&gt;Two ready-to-run projects:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Backend&lt;&#x2F;strong&gt;: Vapor server with full WebAuthn support&lt;br &#x2F;&gt;
Repo: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;peterspath&#x2F;PasskeyBackend&quot;&gt;github.com&#x2F;peterspath&#x2F;PasskeyBackend&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Client&lt;&#x2F;strong&gt;: macOS SwiftUI app&lt;br &#x2F;&gt;
Repo: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;peterspath&#x2F;PasskeyDemo&quot;&gt;github.com&#x2F;peterspath&#x2F;PasskeyDemo&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The user enters an email and clicks one button. The app decides whether to register or log in. After Face ID or Touch ID, an encryption key is ready.&lt;&#x2F;p&gt;
&lt;p&gt;Key client code:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;swift&quot; class=&quot;language-swift &quot;&gt;&lt;code class=&quot;language-swift&quot; data-lang=&quot;swift&quot;&gt;&amp;#x2F;&amp;#x2F; Unified flow (auto register or login)
await authManager.authenticate(
	email: email, 
	presentationAnchor: window
)

&amp;#x2F;&amp;#x2F; After success
if let prfOutput = credential.prf {
	self.encryptionKey = prfOutput.first  &amp;#x2F;&amp;#x2F; AES-256 key ready
}

&amp;#x2F;&amp;#x2F; Use it
let encrypted = try authManager.encryptString(
	&amp;quot;My secret data&amp;quot;
)

let decrypted = try authManager.decryptToString(
	encrypted
)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;how-the-prf-extension-works-and-helps-with-key-management&quot;&gt;How the PRF Extension Works and Helps with Key Management&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Registration&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Client creates a 512-bit salt and sends it to the backend.&lt;br &#x2F;&gt;
Passkey is created with the PRF extension.&lt;br &#x2F;&gt;
Client receives the first key output.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Login&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Backend returns the stored salt.&lt;br &#x2F;&gt;
Client performs Passkey login with the same salt.&lt;br &#x2F;&gt;
Device returns the exact same key.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The PRF extension helps key management in three important ways:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;the key stays on the device. It never reaches the server.&lt;&#x2F;li&gt;
&lt;li&gt;the key is deterministic. The same Passkey plus the same salt always gives the exact same key. You do not store the key anywhere. You derive it fresh each login.&lt;&#x2F;li&gt;
&lt;li&gt;rotation is simple. The server can issue a new salt. The client then derives a new key. Old encrypted data can stay safe while new data uses the fresh key.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;better-user-experience-through-simple-key-management&quot;&gt;Better User Experience Through Simple Key Management&lt;&#x2F;h3&gt;
&lt;p&gt;This way of managing keys makes the user experience much better. Users do not need to remember extra passwords or handle key files. Encryption becomes automatic. After login the app has the key ready. People can encrypt and decrypt data with one click.&lt;&#x2F;p&gt;
&lt;p&gt;Encryption of data must be usable. Otherwise people will not use it. The PRF extension and seamless flow fix this problem. Strong security now comes with simple, natural steps.&lt;&#x2F;p&gt;
&lt;p&gt;In our demo the encryption section appears right after login. Users see it works instantly. This is how we make privacy features something people actually enjoy.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;security-guarantees&quot;&gt;Security Guarantees&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;No passwords&lt;&#x2F;li&gt;
&lt;li&gt;No server-side keys&lt;&#x2F;li&gt;
&lt;li&gt;Keys never leave the device&lt;&#x2F;li&gt;
&lt;li&gt;Full zero-knowledge encryption&lt;&#x2F;li&gt;
&lt;li&gt;Phishing resistant&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>E2EE Backend part 2: Private Information Retrieval</title>
          <pubDate>Mon, 23 Feb 2026 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-e2ee-backend-part-2-private-information-retrieval/</link>
          <guid>https://peterspath.net/blog/dev-e2ee-backend-part-2-private-information-retrieval/</guid>
          <description xml:base="https://peterspath.net/blog/dev-e2ee-backend-part-2-private-information-retrieval/">&lt;p&gt;This is the second post in a series that explores a truly privacy-preserving, end-to-end encrypted backend and client.
The goal of this part: a demo that can look up data in an encrypted database &lt;strong&gt;without telling the server what you search for&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;&#x2F;h3&gt;
&lt;p&gt;Homomorphic encryption lets servers compute on encrypted data. But often you need to fetch specific records first. Normal queries show the server your search terms. That breaks privacy.
&lt;strong&gt;Private Information Retrieval (PIR)&lt;&#x2F;strong&gt; fixes this:
The client asks for a value by keyword. The server sends back the match in encrypted form. But the server does not know which keyword you asked for.
This pairs well with homomorphic encryption for full zero-knowledge operations.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-demo-private-lookup-of-contacts&quot;&gt;The Demo: Private Lookup of Contacts&lt;&#x2F;h3&gt;
&lt;p&gt;Here is a complete, runnable Swift example using &lt;strong&gt;Apple’s open-source HomomorphicEncryption and PrivateInformationRetrieval frameworks&lt;&#x2F;strong&gt; (KeywordPIR with MulPir).&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;swift&quot; class=&quot;language-swift &quot;&gt;&lt;code class=&quot;language-swift&quot; data-lang=&quot;swift&quot;&gt;&amp;#x2F;&amp;#x2F; Key parts
let encryptionParams = try EncryptionParameters&amp;lt;Bfv&amp;lt;UInt32&amp;gt;&amp;gt;(
	from: .n_4096_logq_27_28_28_logt_5
)
let context = try Context(
	encryptionParameters: encryptionParams
)
let secretKey = try context.generateSecretKey()

&amp;#x2F;&amp;#x2F; Setup database with 999 entries
let (keyPam, pirPam, processed, _, _, evKey) = try 
setupKeywordPirDatabase(
	keywordValues: keywordDatabase
)

&amp;#x2F;&amp;#x2F; Client: Generate query
let query = try generateQuery(
	keyword: &amp;quot;Bob12&amp;quot;, 
	keywordParameter: keyPam, 
	pirParameter: pirPam, 
	context: context, 
	secretKey: secretKey
)

&amp;#x2F;&amp;#x2F; Server: Compute response
let response = try computeResponse(
	query: query, 
	keywordParameter: keyPam, 
	pirParameter: pirPam, 
	processed: processed, 
	context: context, 
	evaluationKey: evKey
)

&amp;#x2F;&amp;#x2F; Client: Decrypt
let result = try decryptResponse(
	response: response, 
	keyword: &amp;quot;Bob12&amp;quot;, 
	keywordParameter: keyPam, 
	pirParameter: pirPam, 
	context: context, 
	secretKey: secretKey
)

print(&amp;quot;Result: \(result ?? &amp;quot;Not found&amp;quot;)&amp;quot;)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Output&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;shell&quot; class=&quot;language-shell &quot;&gt;&lt;code class=&quot;language-shell&quot; data-lang=&quot;shell&quot;&gt;Result for &amp;#x27;Bob12&amp;#x27;:
Contact: +1-555-0589 | Email: bob12@example.com
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Repo: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;peterspath&#x2F;HomomorphicLookup&quot;&gt;github.com&#x2F;peterspath&#x2F;HomomorphicLookup&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;why-these-parameters&quot;&gt;Why These Parameters?&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Polynomial degree &lt;strong&gt;N = 4096&lt;&#x2F;strong&gt; → good for demos; use 8192+ in production for more security&lt;&#x2F;li&gt;
&lt;li&gt;Plaintext modulus &lt;strong&gt;logt_5&lt;&#x2F;strong&gt; → fits small values like contact info&lt;&#x2F;li&gt;
&lt;li&gt;Coefficient modulus &lt;strong&gt;[27, 28, 28]&lt;&#x2F;strong&gt; → controls noise for multiplications&lt;&#x2F;li&gt;
&lt;li&gt;Cuckoo hashing with 2 functions → maps keywords to indices privately
The setup takes seconds. Each query processes in under 10 seconds on typical hardware.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;how-lookup-works-under-the-hood-keywordpir&quot;&gt;How Lookup Works Under the Hood (KeywordPIR)&lt;&#x2F;h3&gt;
&lt;p&gt;KeywordPIR uses homomorphic encryption to hide the query.
Client hashes the keyword and encrypts a query vector. Server multiplies this by the database matrix homomorphically. Result is the encrypted value at that index.
Server sees only ciphertexts. It cannot tell the keyword.
We use &lt;strong&gt;MulPir&lt;&#x2F;strong&gt; for efficient multi-query support and &lt;strong&gt;BFV&lt;&#x2F;strong&gt; for the encryption scheme.
This handles missing keys by returning nil.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;further-reading&quot;&gt;Further Reading&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;apple&#x2F;swift-homomorphic-encryption&quot;&gt;Apple&#x27;s Swift Homomorphic Encryption&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;announcing-swift-homomorphic-encryption&#x2F;&quot;&gt;Apple&#x27;s PIR Announcement&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;machinelearning.apple.com&#x2F;research&#x2F;homomorphic-encryption&quot;&gt;Apple&#x27;s ML + HE Research&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Announcing Swift System Metrics 1.0</title>
          <pubDate>Fri, 20 Feb 2026 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-system-metrics-1-0-released/</link>
          <guid>https://peterspath.net/blog/dev-swift-system-metrics-1-0-released/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-system-metrics-1-0-released/">&lt;blockquote&gt;
&lt;p&gt;We are excited to announce the 1.0 release of Swift System Metrics, a Swift package that collects process-level system metrics like CPU utilization time and memory usage. Swift System Metrics runs on both Linux and macOS, providing a common API across platforms.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-system-metrics-1.0-released&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;swift-system-metrics-1.0-released&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Apple released Swift System Metrics 1.0. It is a Swift package that collects system metrics from a process. It works on Linux and macOS with the same API. It tracks:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;CPU use time&lt;&#x2F;li&gt;
&lt;li&gt;Virtual and resident memory use&lt;&#x2F;li&gt;
&lt;li&gt;Open file descriptors and the maximum allowed&lt;&#x2F;li&gt;
&lt;li&gt;Process start time&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You add it with a few lines of code. It sends data to Swift Metrics, which works with Prometheus and OpenTelemetry. It uses Swift Service Lifecycle for start-up and clean-up. Version 1.0 has a stable API. The package was once called swift-metrics-extras. It includes an example Grafana dashboard.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>E2EE Backend part 1: Homomorphic Encryption</title>
          <pubDate>Mon, 09 Feb 2026 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-e2ee-backend-part-1-homomorphic-encryption/</link>
          <guid>https://peterspath.net/blog/dev-e2ee-backend-part-1-homomorphic-encryption/</guid>
          <description xml:base="https://peterspath.net/blog/dev-e2ee-backend-part-1-homomorphic-encryption/">&lt;p&gt;This is the first post in a series exploring a truly privacy-preserving, end-to-end encrypted backend and client.&lt;&#x2F;p&gt;
&lt;p&gt;The goal of this part: a demo that can calculate totals on encrypted user data &lt;strong&gt;without ever seeing the plaintext&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;&#x2F;h3&gt;
&lt;p&gt;Traditional E2EE protects data &lt;strong&gt;at rest&lt;&#x2F;strong&gt; and &lt;strong&gt;in transit&lt;&#x2F;strong&gt;, but the moment the server needs to do anything useful (e.g., compute total revenue, average score, or aggregate telemetry), it must decrypt. That defeats the purpose of zero-trust architecture.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Homomorphic encryption&lt;&#x2F;strong&gt; changes the game:&lt;br &#x2F;&gt;
&lt;code&gt;Encrypt(a) + Encrypt(b) = Encrypt(a + b)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The server adds (or multiplies) ciphertexts directly. The result decrypts to the correct plaintext on the client.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-demo-homomorphic-sum-of-72-encrypted-numbers&quot;&gt;The Demo: Homomorphic Sum of 72 Encrypted Numbers&lt;&#x2F;h3&gt;
&lt;p&gt;Here’s a complete, runnable Swift example using &lt;strong&gt;Apple’s excellent open-source HomomorphicEncryption framework&lt;&#x2F;strong&gt; (BFV scheme with &lt;code&gt;UInt64&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;swift&quot; class=&quot;language-swift &quot;&gt;&lt;code class=&quot;language-swift&quot; data-lang=&quot;swift&quot;&gt;&amp;#x2F;&amp;#x2F; Key parts

let params = try EncryptionParameters&amp;lt;Bfv&amp;lt;UInt64&amp;gt;&amp;gt;(
	from: .n_8192_logq_40_60_60_logt_26
)
let context = try Context(encryptionParameters: params)
let secretKey = try context.generateSecretKey()

&amp;#x2F;&amp;#x2F; Encrypt each value separately
&amp;#x2F;&amp;#x2F; coefficient encoding
&amp;#x2F;&amp;#x2F; one value per ciphertext
let (ciphertexts, plaintexts) = try encryptRandomNumbers(
	numberOfValues: 72, 
	context: context, 
	secretKey: secretKey
)

let encryptedSum = try calculateEncryptedSum(
	ciphertexts: ciphertexts
)

&amp;#x2F;&amp;#x2F; Decrypt &amp;amp; verify
let decrypted = try encryptedSum.decrypt(
	using: secretKey
)
let result = try decrypted.decode(
	format: .coefficient
)[0]

print(&amp;quot;Expected: \(plaintexts.reduce(0, +)) | Actual: \(result)&amp;quot;)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Output&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;shell&quot; class=&quot;language-shell &quot;&gt;&lt;code class=&quot;language-shell&quot; data-lang=&quot;shell&quot;&gt;Expected sum: 41869
Result from homomorphic operation: 41869
Match: ✓ Success!
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Repo: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;peterspath&#x2F;HomomorphicSum&quot;&gt;github.com&#x2F;peterspath&#x2F;HomomorphicSum&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;why-these-parameters&quot;&gt;Why These Parameters?&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Polynomial degree &lt;strong&gt;N = 8192&lt;&#x2F;strong&gt; → supports up to ~8192 operations before noise becomes critical&lt;&#x2F;li&gt;
&lt;li&gt;Plaintext modulus &lt;strong&gt;t ≈ 2²⁶&lt;&#x2F;strong&gt; → plenty of room for the sum of 72 numbers (each ≤999) without modular wrap-around&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;logq_40_60_60&lt;&#x2F;code&gt; gives sufficient ciphertext modulus bits to keep noise growth manageable during addition&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Addition of ciphertexts is &lt;strong&gt;extremely cheap&lt;&#x2F;strong&gt; compared to multiplication (no relinearization needed).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-addition-works-under-the-hood-bfv&quot;&gt;How Addition Works Under the Hood (BFV)&lt;&#x2F;h3&gt;
&lt;p&gt;In BFV, a ciphertext encrypts a plaintext polynomial in the ring &lt;code&gt;R_t = Z_t[X]&#x2F;(X^N + 1)&lt;&#x2F;code&gt;. When you add two ciphertexts:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;ct₁ + ct₂ = (c0₁ + c0₂, c1₁ + c1₂) mod q&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Decrypting this recovers exactly &lt;code&gt;m₁ + m₂ mod t&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Because we used &lt;strong&gt;coefficient encoding&lt;&#x2F;strong&gt; with one value per ciphertext, each ciphertext holds a single scalar. This is the simplest way to demonstrate correctness before moving to packed&#x2F;SIMD encoding.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Announcing the Windows Workgroup</title>
          <pubDate>Mon, 26 Jan 2026 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-announcing-windows-workgroup/</link>
          <guid>https://peterspath.net/blog/dev-swift-announcing-windows-workgroup/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-announcing-windows-workgroup/">&lt;blockquote&gt;
&lt;p&gt;The new Windows workgroup joins a growing list of Swift workgroups, including the Android workgroup, Build and Packaging workgroup, and Testing workgroup which were all added in the past year. Swift workgroups are community-led efforts, formally recognized by the project, to help move forward key areas.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;announcing-windows-workgroup&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;announcing-windows-workgroup&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Swift project has launched a Windows workgroup. Its main goal is to maintain and improve Swift support on Windows. This lets developers build Windows apps with Swift and its tools. The workgroup will:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Keep the official Swift release reliable on Windows.&lt;&#x2F;li&gt;
&lt;li&gt;Suggest improvements to core packages like Foundation and Dispatch for better Windows fit.&lt;&#x2F;li&gt;
&lt;li&gt;Advise the Swift project on future Windows direction.&lt;&#x2F;li&gt;
&lt;li&gt;Share best practices for linking Swift to Windows APIs and shipping Swift libraries in Windows apps.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</description>
      </item>
      <item>
          <title>Improving the usability of C libraries in Swift</title>
          <pubDate>Thu, 22 Jan 2026 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-improving-usability-of-c-libraries-in-swift/</link>
          <guid>https://peterspath.net/blog/dev-swift-improving-usability-of-c-libraries-in-swift/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-improving-usability-of-c-libraries-in-swift/">&lt;blockquote&gt;
&lt;p&gt;There are many interesting, useful, and fun C libraries in the software ecosystem. While one could go and rewrite these libraries in Swift, usually there is no need, because Swift provides direct interoperability with C. With a little setup, you can directly use existing C libraries from your Swift code.&lt;&#x2F;p&gt;
&lt;p&gt;When you use a C library directly from Swift, it will look and feel similar to using it from C. That can be useful if you’re following sample code or a tutorial written in C, but it can also feel out of place.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;improving-usability-of-c-libraries-in-swift&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;improving-usability-of-c-libraries-in-swift&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Swift can call C libraries directly, but the result feels like C code: unsafe pointers, manual reference counting, and long function names. Use a module map and an API notes file (YAML) to fix this without touching the C header. This turns C enums into real Swift enums, objects into classes with automatic memory management, functions into methods with labels, bit flags into OptionSets, and more.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Fucking Approachable Swift Concurrency</title>
          <pubDate>Tue, 30 Dec 2025 15:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-fucking-approachable-swift-concurrency/</link>
          <guid>https://peterspath.net/blog/dev-fucking-approachable-swift-concurrency/</guid>
          <description xml:base="https://peterspath.net/blog/dev-fucking-approachable-swift-concurrency/">&lt;blockquote&gt;
&lt;p&gt;Swift Concurrency can feel like a lot of concepts: &lt;code&gt;async&#x2F;await&lt;&#x2F;code&gt;, &lt;code&gt;Task&lt;&#x2F;code&gt;, actors, &lt;code&gt;MainActor&lt;&#x2F;code&gt;, &lt;code&gt;Sendable&lt;&#x2F;code&gt;, isolation domains. But there&#x27;s really just one idea at the center of it all: &lt;strong&gt;isolation is inherited by default&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;With &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-6.2-released&#x2F;#approachable-concurrency&quot;&gt;Approachable Concurrency&lt;&#x2F;a&gt; enabled, your app starts on &lt;code&gt;MainActor&lt;&#x2F;code&gt;. That&#x27;s your starting point. From there:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Every function you call &lt;strong&gt;inherits&lt;&#x2F;strong&gt; that isolation&lt;&#x2F;li&gt;
&lt;li&gt;Every closure you create &lt;strong&gt;captures&lt;&#x2F;strong&gt; that isolation&lt;&#x2F;li&gt;
&lt;li&gt;Every &lt;code&gt;Task { }&lt;&#x2F;code&gt; you spawn &lt;strong&gt;inherits&lt;&#x2F;strong&gt; that isolation&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You don&#x27;t have to annotate anything. You don&#x27;t have to think about threads. Your code runs on &lt;code&gt;MainActor&lt;&#x2F;code&gt;, and the isolation just propagates through your program automatically.&lt;&#x2F;p&gt;
&lt;p&gt;When you need to break out of that inheritance, you do it explicitly:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;@concurrent&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; says &quot;run this on a background thread&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;actor&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; says &quot;this type has its own isolation domain&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Task.detached { }&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; says &quot;start fresh, inherit nothing&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And when you pass data between isolation domains, Swift checks that it&#x27;s safe. That&#x27;s what &lt;code&gt;Sendable&lt;&#x2F;code&gt; is for: marking types that can safely cross boundaries.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s it. That&#x27;s the whole model:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Isolation propagates&lt;&#x2F;strong&gt; from &lt;code&gt;MainActor&lt;&#x2F;code&gt; through your code&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;You opt out explicitly&lt;&#x2F;strong&gt; when you need background work or separate state&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Sendable guards the boundaries&lt;&#x2F;strong&gt; when data crosses between domains&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;When the compiler complains, it&#x27;s telling you one of these rules was violated. Trace the inheritance: where did the isolation come from? Where is the code trying to run? What data is crossing a boundary? The answer is usually obvious once you ask the right question.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;fuckingapproachableswiftconcurrency.com&#x2F;en&#x2F;&quot;&gt;fuckingapproachableswiftconcurrency.com&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is an excellent explanation of Swift Concurrency. It covers key ideas like async and await, actors, tasks, and structured ways to handle work in the background. The text makes hard topics clear and easy to follow.&lt;&#x2F;p&gt;
&lt;p&gt;People who build apps with Swift will find it helpful. It is worth the time to read. Keep it as a bookmark for later use. Share it with others who code in Swift so they can learn too.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Swift Configuration 1.0 released</title>
          <pubDate>Fri, 12 Dec 2025 16:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-configuration-1-0-released/</link>
          <guid>https://peterspath.net/blog/dev-swift-configuration-1-0-released/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-configuration-1-0-released/">&lt;blockquote&gt;
&lt;p&gt;Swift Configuration brings a unified, type-safe approach to this problem for Swift applications and libraries. What makes this compelling isn’t just that it reads configuration files: plenty of libraries do that. It’s the clean abstraction that it introduces between how your code accesses configuration and where that configuration comes from. This separation unlocks something powerful: libraries can now accept configuration without dictating the source, making them genuinely composable across different deployment environments.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-configuration-1.0-released&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;swift-configuration-1.0-released&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Swift Configuration is a new library for Swift. It handles settings in a unified way. You read values the same way no matter where they come from. Before, developers had to write code for each source. This included environment variables, files, or remote services. Code often mixed with how values were read. Swift Configuration fixes this. It separates code that uses settings from code that loads them. Libraries can now take a configuration reader. They do not need to know the source. This makes libraries work in more places.&lt;&#x2F;p&gt;
&lt;p&gt;You start with a few lines. Import the library. Create a reader with providers. Providers load from files, environment, or arguments. You can layer providers. First ones override later ones. Defaults fill in last. It supports synchronous or asynchronous access. It can watch for changes and reload. It has namespacing, logging, and secret hiding.&lt;&#x2F;p&gt;
&lt;p&gt;Many projects use it. Examples include Vapor, Hummingbird, and Swift Temporal SDK. Some apps like Peekaboo and swiftodon use it too. Custom providers exist for TOML or AWS. This library makes configuration clean and flexible. It suits servers, tools, and libraries.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Embedded Swift Improvements Coming in Swift 6.3</title>
          <pubDate>Tue, 18 Nov 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-embedded-swift-improvements-coming-in-swift-6-3/</link>
          <guid>https://peterspath.net/blog/dev-embedded-swift-improvements-coming-in-swift-6-3/</guid>
          <description xml:base="https://peterspath.net/blog/dev-embedded-swift-improvements-coming-in-swift-6-3/">&lt;blockquote&gt;
&lt;p&gt;Embedded Swift is a subset of Swift that’s designed for low resource usage, making it capable of running on constrained environments like microcontrollers. Using a special compilation mode, Embedded Swift produces significantly smaller binaries than regular Swift. While a subset of the full language, the vast majority of the Swift language works exactly the same in Embedded Swift. Additional information is described in the Embedded Swift vision document.&lt;&#x2F;p&gt;
&lt;p&gt;Embedded Swift is evolving rapidly. This post describes a number of improvements made in the last few months, covering everything from improved C interoperability to better debugging and steps toward a complete linkage model for Embedded Swift.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;embedded-swift-improvements-coming-in-swift-6.3&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;embedded-swift-improvements-coming-in-swift-6.3&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Swift 6.3 advances Embedded Swift, a subset for microcontrollers, with key improvements in libraries, diagnostics, C interoperability, debugging, and linking. Floating-point types now support &lt;code&gt;description&lt;&#x2F;code&gt; and &lt;code&gt;debugDescription&lt;&#x2F;code&gt; via a Swift implementation, while new &lt;code&gt;EmbeddedRestrictions&lt;&#x2F;code&gt; warnings flag unavailable constructs like untyped throws.&lt;&#x2F;p&gt;
&lt;p&gt;The Swift MMIO package 0.1.x adds bug fixes, documentation, and &lt;code&gt;svd2swift&lt;&#x2F;code&gt; code generation from SVD files, with SVD2LLDB enhancing register inspection in LLDB. C interoperability gains &lt;code&gt;@c&lt;&#x2F;code&gt; functions and enums for C-compatible declarations, better tolerance for signature mismatches, and &lt;code&gt;@section&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;@used&lt;&#x2F;code&gt; attributes for linker control.&lt;&#x2F;p&gt;
&lt;p&gt;Debugging improves with value printing, core dump inspection of standard library types like &lt;code&gt;Dictionary&lt;&#x2F;code&gt;, and reliable ARMv7m exception unwinding. Linking progresses with weak symbol definitions to avoid duplicates and &lt;code&gt;@export&lt;&#x2F;code&gt; for controlling function visibility, moving toward a formalized Embedded Swift linkage model.&lt;&#x2F;p&gt;
&lt;p&gt;These features, available in nightly toolchains, enhance safety, performance, and usability on constrained devices.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Instrumenting Vapor 4 with Swift OTel</title>
          <pubDate>Wed, 12 Nov 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-vapor-otel-integration/</link>
          <guid>https://peterspath.net/blog/dev-vapor-otel-integration/</guid>
          <description xml:base="https://peterspath.net/blog/dev-vapor-otel-integration/">&lt;blockquote&gt;
&lt;p&gt;In complex systems it&#x27;s often a good thing to be able to figure out why the system is behaving in a certain way without having to look into the code. When we want to be able to have a more high level view of what happens in the application without opening up the black box, we&#x27;re looking for observability. Observability is the concept of collecting information about a system&#x27;s execution and internal state, based on the data it generates.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;blog.vapor.codes&#x2F;posts&#x2F;otel-integration&#x2F;&quot;&gt;blog.vapor.codes&#x2F;posts&#x2F;otel-integration&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The tutorial guides developers through instrumenting a Vapor 4 application with OpenTelemetry for metrics collection, visualised in Grafana, emphasising observability’s role in understanding system behaviour without code inspection.&lt;&#x2F;p&gt;
&lt;p&gt;Observability comprises logs for event details, metrics for instantaneous measurements like HTTP requests per second, and traces for data flow across components. The process uses Vapor’s built-in swift-metrics support to emit metrics, with swift-otel sending them to an OpenTelemetry Collector via OTLP, configured in &lt;code&gt;configure.swift&lt;&#x2F;code&gt; with a &lt;code&gt;OTelLifecycleHandler&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A Docker Compose setup runs the Collector, exporting to Prometheus, with Grafana for visualisation, using a provided dashboard JSON. Deployment on AWS ECS Fargate involves a sidecar Collector, AWS Managed Prometheus for storage, and Managed Grafana for dashboards, ensuring scalable monitoring. This setup enables real-time performance insights, leveraging Swift’s ecosystem for robust server-side observability.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Introducing Temporal Swift SDK: Building durable and reliable workflows</title>
          <pubDate>Tue, 11 Nov 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-temporal-sdk/</link>
          <guid>https://peterspath.net/blog/dev-swift-temporal-sdk/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-temporal-sdk/">&lt;blockquote&gt;
&lt;p&gt;Building reliable distributed systems requires handling failures gracefully, coordinating complex actions across multiple services, and ensuring long-running processes complete successfully. Rather than develop these resiliency features into every application or service you develop, an alternative approach is to use workflows. Workflows encapsulate your code so it runs durably and handles many common failure scenarios.&lt;&#x2F;p&gt;
&lt;p&gt;Temporal is widely used for workflow orchestration across many languages. With the release of the SDK, Temporal is now available for Swift developers building production cloud services.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-temporal-sdk&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;swift-temporal-sdk&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Temporal Swift SDK is now open source, bringing Temporal&#x27;s durable workflow orchestration to Swift developers for reliable distributed systems.&lt;&#x2F;p&gt;
&lt;p&gt;Temporal handles failures gracefully by resuming workflows automatically after crashes, using a separation of deterministic workflows (defining logic) and idempotent activities (performing work). The SDK leverages Swift’s async&#x2F;await, structured concurrency, strong typing, and macros for a seamless, low-boilerplate experience.&lt;&#x2F;p&gt;
&lt;p&gt;It enables building resilient applications like data pipelines and payment processing without custom retry or state management code. Developers can explore documentation, example projects, and the repository to implement workflows and activities efficiently.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Announcing the Swift SDK for Android</title>
          <pubDate>Sat, 25 Oct 2025 15:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-nightly-swift-sdk-for-android/</link>
          <guid>https://peterspath.net/blog/dev-nightly-swift-sdk-for-android/</guid>
          <description xml:base="https://peterspath.net/blog/dev-nightly-swift-sdk-for-android/">&lt;blockquote&gt;
&lt;p&gt;The Android workgroup is an open group, free for anyone to join, that aims to expand Swift to Android. Today, we are pleased to announce nightly preview releases of the Swift SDK for Android.&lt;&#x2F;p&gt;
&lt;p&gt;This milestone reflects months of effort by the Android workgroup, building on many years of grassroots community effort. With the SDK, developers can begin developing Android applications in Swift, opening new avenues for cross-platform development and accelerating innovation across the mobile ecosystem.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;nightly-swift-sdk-for-android&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;nightly-swift-sdk-for-android&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Swift has grown over the last ten years to run on many platforms, from cloud services to Windows, browsers, and small devices. It lets developers share code between these platforms. The Android workgroup has now released preview toolchains that let you build Swift code for Android phones and tablets. You can download the Swift SDK for Android today, either with the Windows installer or on its own for Linux or macOS.&lt;&#x2F;p&gt;
&lt;p&gt;A guide shows how to set up your first Swift app on Android. Example projects help you see full apps working. Over a quarter of packages on the Swift17 Package Index already build for Android. You can start moving your Swift packages to Android now. The swift-java project helps mix Swift and Java code safely.&lt;&#x2F;p&gt;
&lt;p&gt;The workgroup is writing a plan for the future of Swift on Android. You can read it and give ideas. A project board shows what work is happening. Talk about your ideas or share apps on the Swift forums in the Android section.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Introducing Swift Profile Recorder</title>
          <pubDate>Tue, 07 Oct 2025 15:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-profile-recorder/</link>
          <guid>https://peterspath.net/blog/dev-swift-profile-recorder/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-profile-recorder/">&lt;blockquote&gt;
&lt;p&gt;Profiling enables you to understand where your Swift application spends its time, whether it’s computing, waiting for a lock acquisition, or blocked in file I&#x2F;O. Profiling is achieved by collecting samples of activity, which provide insight into how it’s being used.&lt;&#x2F;p&gt;
&lt;p&gt;Modern operating systems have tooling available to profile your applications or even the whole system. Examples include Apple’s Instruments, sample, and Linux’s perf. Furthermore, there are kernel systems like DTrace or eBPF that can be used to profile your applications.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-profile-recorder&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;swift-profile-recorder&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Apple has open-sourced Swift Profile Recorder, an in-process sampling profiler for Swift services, enabling easy performance analysis without external tools or special privileges. It runs within the application process, supporting macOS and Linux, and integrates via a Swift package with a simple HTTP endpoint for collecting samples using &lt;code&gt;curl&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Profiles output in industry-standard formats like Linux perf, pprof, and collapsed stacks, compatible with tools like Speedscope, Firefox Profiler, and FlameGraph for visualisation. Used at Apple for years to debug latency-sensitive services, it addresses challenges in sandboxed or restricted environments where tools like eBPF are unavailable.&lt;&#x2F;p&gt;
&lt;p&gt;The package supports continuous profiling and can feed data to systems like Parca or Pyroscope, complementing &lt;code&gt;swift-parca&lt;&#x2F;code&gt; for broader ecosystem use. Developers can add it to projects with minimal setup, start the server via environment variables, and collect samples for analysis, with community feedback welcomed on GitHub.&lt;&#x2F;p&gt;
&lt;p&gt;This tool lowers barriers to profiling Swift server applications, enhancing performance insights across deployment environments.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The Growth of the Swift Server Ecosystem</title>
          <pubDate>Wed, 24 Sep 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-on-the-server-ecosystem/</link>
          <guid>https://peterspath.net/blog/dev-swift-on-the-server-ecosystem/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-on-the-server-ecosystem/">&lt;blockquote&gt;
&lt;p&gt;Nearly ten years ago, Swift was open sourced and an official runtime for Linux was released. I’ve been involved with Swift on the server since almost the very beginning, originally picking it up as a way to use a language I really enjoyed for backend development. In that time Swift has come a long way, with stability across platforms, a burgeoning ecosystem and many success stories. It’s matured into a great option for highly-scalable server applications, websites, and lambdas. In this post, I’ll cover how Swift:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;is seeing a number of success stories of running critical production workloads&lt;&#x2F;li&gt;
&lt;li&gt;has evolved to be a powerful language for server development&lt;&#x2F;li&gt;
&lt;li&gt;has a thriving ecosystem of frameworks and libraries&lt;&#x2F;li&gt;
&lt;li&gt;has a growing and passionate community - including a dedicated server conference coming up in October!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-on-the-server-ecosystem&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;swift-on-the-server-ecosystem&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This post reflects on a decade of Swift’s evolution as a robust server-side language since its open-sourcing and Linux runtime release. Highlighting success stories, it notes the Things app’s backend migration from Python to Swift, achieving a 4x performance boost and cost reduction, and Apple’s Password Monitoring Service, which saw a 40% throughput increase and 90% memory usage drop after switching from Java.&lt;&#x2F;p&gt;
&lt;p&gt;Swift’s language advancements, including UTF-8 strings, Codable, keypaths, property wrappers, and Swift Concurrency with Sendable, have eliminated data race issues, as evidenced by Vapor’s crash-free record. The ecosystem thrives with frameworks like Vapor and Hummingbird, supported by the Swift Package Index and observability packages for logging, metrics, and tracing, ensuring compatibility with tools like Prometheus.&lt;&#x2F;p&gt;
&lt;p&gt;Swift’s interoperability with C, C++, and Java, enhanced by cross-compilation SDKs and the Swiftly CLI, facilitates integration and migration. The growing community, driven by the Swift Server Workgroup, culminates in the annual ServerSide.swift conference, featuring talks on gRPC, concurrency, and success stories, with workshops for newcomers, fostering a vibrant future for Swift server development.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Meet Vapor for VS Code</title>
          <pubDate>Wed, 24 Sep 2025 16:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-vapor-for-vscode/</link>
          <guid>https://peterspath.net/blog/dev-vapor-for-vscode/</guid>
          <description xml:base="https://peterspath.net/blog/dev-vapor-for-vscode/">&lt;blockquote&gt;
&lt;p&gt;The extension offers a variety of features related to Vapor, Fluent, and Leaf. It supports all platforms supported by Vapor, including macOS and Linux. It can also be used with VS Code in the browser, but only for some Leaf-related features.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;blog.vapor.codes&#x2F;posts&#x2F;vapor-for-vscode&#x2F;&quot;&gt;blog.vapor.codes&#x2F;posts&#x2F;vapor-for-vscode&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The &quot;Vapor for VS Code&quot; extension, developed over six months to enhance Vapor application development, supporting macOS, Linux, and limited Leaf features in browser-based VS Code. It enables project creation via the Welcome page or Command Palette’s Vapor: Create New Project... command, using Vapor’s default template or custom ones via URL, requiring the Vapor Toolbox for setup.&lt;&#x2F;p&gt;
&lt;p&gt;The extension provides robust Leaf language support, including syntax highlighting for Leaf tags atop HTML, formatting for consistent indentation with Format Document or Format Selection, and Emmet support for quick HTML generation. It also offers IntelliSense snippets for Vapor endpoints, Fluent models, migrations, and Leaf constructs, accessible via typing or the Insert Snippet command.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Swift 6.2 Released</title>
          <pubDate>Tue, 16 Sep 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-6-2-released/</link>
          <guid>https://peterspath.net/blog/dev-swift-6-2-released/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-6-2-released/">&lt;blockquote&gt;
&lt;p&gt;We’re excited to announce Swift 6.2, a release aimed at making every Swift developer more productive, regardless of where or how you write code. From improved tooling and libraries to enhancements in concurrency and performance, Swift 6.2 delivers a broad set of features designed for real-world development at every layer of the software stack.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-6.2-released&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;swift-6.2-released&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Swift 6.2 focuses on developer productivity with approachable concurrency features like single-threaded defaults on the main actor, intuitive async functions that run in the caller’s context, and the &lt;code&gt;@concurrent&lt;&#x2F;code&gt; attribute for explicit parallelism.&lt;&#x2F;p&gt;
&lt;p&gt;It advances safe systems programming with &lt;code&gt;InlineArray&lt;&#x2F;code&gt; for stack-allocated fixed-size arrays, &lt;code&gt;Span&lt;&#x2F;code&gt; for safe contiguous memory access, and opt-in strict memory safety to flag unsafe constructs. The VS Code Swift extension gains background indexing, LLDB debugging, a project panel, and live DocC previews for seamless editing.&lt;&#x2F;p&gt;
&lt;p&gt;Swift 6.2 introduces &lt;code&gt;Subprocess&lt;&#x2F;code&gt; for streamlined external process management and enhances Foundation’s &lt;code&gt;NotificationCenter&lt;&#x2F;code&gt; with concrete notification types and async support. &lt;code&gt;Swift Testing&lt;&#x2F;code&gt; adds exit testing, attachments for test results, and raw identifier names, while WebAssembly support enables client&#x2F;server apps for browsers and runtimes. Migration tooling aids upcoming feature adoption, and the community is thanked for shaping these enhancements.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Memory Integrity Enforcement</title>
          <pubDate>Mon, 15 Sep 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-memory-integrity-enforcement/</link>
          <guid>https://peterspath.net/blog/dev-memory-integrity-enforcement/</guid>
          <description xml:base="https://peterspath.net/blog/dev-memory-integrity-enforcement/">&lt;blockquote&gt;
&lt;p&gt;Memory Integrity Enforcement (MIE) is the culmination of an unprecedented design and engineering effort, spanning half a decade, that combines the unique strengths of Apple silicon hardware with our advanced operating system security to provide industry-first, always-on memory safety protection across our devices, without compromising our best-in-class device performance. We believe Memory Integrity Enforcement represents the most significant upgrade to memory safety in the history of consumer operating systems.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;security.apple.com&#x2F;blog&#x2F;memory-integrity-enforcement&#x2F;&quot;&gt;security.apple.com&#x2F;blog&#x2F;memory-integrity-enforcement&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Apple introduced Memory Integrity Enforcement (MIE) as a new memory safety feature for iPhone 17 and iPhone Air devices. MIE combines Apple silicon hardware with operating system security to block memory corruption attacks.&lt;&#x2F;p&gt;
&lt;p&gt;It works always and protects key areas like the kernel without slowing down the device. Apple spent five years on this design. No common malware has ever attacked iPhone at the system level. Only rare spyware from state actors uses memory bugs. These bugs let attackers change data or take control.&lt;&#x2F;p&gt;
&lt;p&gt;Apple fights this with safe tools like the Swift language. They also built secure memory allocators called &lt;code&gt;kalloc_type&lt;&#x2F;code&gt; and &lt;code&gt;xzone&lt;&#x2F;code&gt; malloc. In 2018, Apple added Pointer Authentication Codes (PAC) to chips. This stops attacks on code flow. Then Apple looked at Arm&#x27;s Memory Tagging Extension (MTE). MTE tags memory to find errors. Apple worked with Arm to improve it into Enhanced Memory Tagging Extension (EMTE).&lt;&#x2F;p&gt;
&lt;p&gt;EMTE checks tags in real time to block bad access. MIE uses secure allocators plus EMTE to stop buffer overflows and use-after-free bugs. It tags small memory blocks that allocators miss. MIE also guards non-tagged memory and fights attacks from wrong guesses in the chip.&lt;&#x2F;p&gt;
&lt;p&gt;Apple put extra chip space and speed into MIE for strong protection. Tests show MIE stops real spyware chains early. Apple lets developers test MIE with Xcode&#x27;s Enhanced Security setting. MIE makes attacks much harder and costlier. It changes memory safety for consumer devices forever.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>How we approach releases at Vapor</title>
          <pubDate>Fri, 15 Aug 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-vapor-how-we-do-releases/</link>
          <guid>https://peterspath.net/blog/dev-vapor-how-we-do-releases/</guid>
          <description xml:base="https://peterspath.net/blog/dev-vapor-how-we-do-releases/">&lt;blockquote&gt;
&lt;p&gt;See how we approach releases in Vapor, so we can release quickly and often to save time and provide a better experience for users and contributors.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;blog.vapor.codes&#x2F;posts&#x2F;how-we-do-vapor-releases&#x2F;&quot;&gt;blog.vapor.codes&#x2F;posts&#x2F;how-we-do-vapor-releases&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Vapor framework’s release process, outlined by Tim on August 14, 2025, treats each pull request (PR) as a potential release, streamlining development for its 30+ packages.&lt;&#x2F;p&gt;
&lt;p&gt;PRs are labeled as &lt;code&gt;no-release-needed&lt;&#x2F;code&gt;, &lt;code&gt;semver-patch&lt;&#x2F;code&gt; (bug fixes), or &lt;code&gt;semver-minor&lt;&#x2F;code&gt; (new APIs), reviewed by maintainers, and merged with automated releases via Penny, Vapor’s bot, which tags and announces releases on GitHub and Discord.&lt;&#x2F;p&gt;
&lt;p&gt;This automation, initially met with skepticism, saves time, ensures quick bug detection by isolating changes to individual PRs, and benefits contributors by rapidly deploying their code. Despite robust testing, occasional bugs, like Swift 6.1 compilation issues, are quickly identified and reverted due to the granular release strategy.&lt;&#x2F;p&gt;
&lt;p&gt;Beta testing is avoided for minor releases, as it delays feedback without significant user testing, aligning with Vapor’s continuous delivery ethos for faster, reliable updates.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>@isolated(any)</title>
          <pubDate>Tue, 05 Aug 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-isolated-any/</link>
          <guid>https://peterspath.net/blog/dev-isolated-any/</guid>
          <description xml:base="https://peterspath.net/blog/dev-isolated-any/">&lt;blockquote&gt;
&lt;p&gt;Ahh, @isolated(any). It’s an attribute of contradictions. You might see it a lot, but it’s ok to ignore it. You don’t need to use it, but I think it should be used more. It must always take an argument, but that argument cannot vary.&lt;&#x2F;p&gt;
&lt;p&gt;Confusing? Definitely. But we’ll get to it all.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;nshipster.com&#x2F;isolated-any&#x2F;&quot;&gt;nshipster.com&#x2F;isolated-any&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Swift 6.0 release introduced the &lt;code&gt;@isolated(any)&lt;&#x2F;code&gt; attribute to address the challenge of tracking function isolation in async contexts, enabling inspection of a function’s isolation (e.g., MainActor or nonisolated) via a special &lt;code&gt;isolation&lt;&#x2F;code&gt; property of type &lt;code&gt;(any Actor)?&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This attribute is crucial for APIs like &lt;code&gt;Task&lt;&#x2F;code&gt; and &lt;code&gt;TaskGroup&lt;&#x2F;code&gt;, ensuring predictable scheduling, particularly for MainActor-bound tasks, by preserving execution order. While it requires &lt;code&gt;await&lt;&#x2F;code&gt; even for synchronous functions, its primary role is to provide scheduling information for API producers, not callers, who can largely ignore it.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;any&lt;&#x2F;code&gt; argument anticipates future constraints, like specific actor types, enhancing flexibility without impacting source compatibility. Developers are encouraged to use &lt;code&gt;@isolated(any)&lt;&#x2F;code&gt; when passing isolated functions to such APIs to leverage its scheduling benefits, though it’s not essential for most use cases.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Uncertain&lt;T&gt;</title>
          <pubDate>Sat, 26 Jul 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-uncertainty/</link>
          <guid>https://peterspath.net/blog/dev-uncertainty/</guid>
          <description xml:base="https://peterspath.net/blog/dev-uncertainty/">&lt;blockquote&gt;
&lt;p&gt;You know what’s wrong with people? They’re too sure of themselves.&lt;&#x2F;p&gt;
&lt;p&gt;Better to be wrong and own it than be right with caveats. Hard to build a personal brand out of nuance these days. People are attracted to confidence, however misplaced.&lt;&#x2F;p&gt;
&lt;p&gt;But can you blame them? (People, that is) Working in software, the most annoying part of reaching Senior level is having to say “it depends” all the time. Much more fun getting to say “let’s ship it and iterate” as Staff or “that won’t scale” as a Principal.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;nshipster.com&#x2F;uncertainty&#x2F;&quot;&gt;nshipster.com&#x2F;uncertainty&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The provided text critiques the oversimplification in programming that ignores real-world uncertainties, particularly in handling noisy data like GPS coordinates, proposing a probabilistic approach using the &lt;code&gt;Uncertain&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; type inspired by a 2014 research paper.&lt;&#x2F;p&gt;
&lt;p&gt;Implemented in Swift, &lt;code&gt;Uncertain&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; models uncertainty with probability distributions (e.g., Rayleigh for GPS, normal for sensor data) and uses Monte Carlo sampling with Sequential Probability Ratio Testing for efficient computation, allowing operations like comparisons to return probabilistic results (&lt;code&gt;Uncertain&amp;lt;Bool&amp;gt;&lt;&#x2F;code&gt;) rather than definitive Booleans.&lt;&#x2F;p&gt;
&lt;p&gt;Examples include calculating running speed with uncertain time inputs and modelling slot machine payouts, with a companion project showcasing Swift Charts visualisations. The approach encourages acknowledging uncertainty in code to avoid misleading outcomes, advocating for gradual adoption in critical paths and performance profiling to manage computational costs.&lt;&#x2F;p&gt;
&lt;p&gt;It emphasises Swift’s suitability for such abstractions due to its generics and type safety, urging developers to integrate probabilistic modelling to enhance reliability in applications like location-based services.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Redesigned Swift.org is now live</title>
          <pubDate>Thu, 05 Jun 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-redesigned-swift-org-is-now-live/</link>
          <guid>https://peterspath.net/blog/dev-swift-redesigned-swift-org-is-now-live/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-redesigned-swift-org-is-now-live/">&lt;blockquote&gt;
&lt;p&gt;Our goal with the site redesign has been to make Swift.org more approachable for newcomers to Swift, highlight the language’s technical strengths, and make it easy to get started. That led to a focus on the website’s appearance, improving the user experience, and emphasizing important features such as Swift’s multiplatform support.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;redesigned-swift-org-is-now-live&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;redesigned-swift-org-is-now-live&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Swift.org website has been redesigned by the website workgroup to be more approachable for newcomers, highlight Swift’s technical strengths, and emphasise its multi-platform support.&lt;&#x2F;p&gt;
&lt;p&gt;The initial release includes updated home and install pages, plus new pages showcasing use cases like cloud services, command-line tools, and embedded software, with curated content, code examples, and resource links. The redesign features a fresh look with an orange splash and bird animation, reflecting Swift’s creativity.&lt;&#x2F;p&gt;
&lt;p&gt;The workgroup plans to iteratively improve the site and invites community feedback through Swift Forums, GitHub issues, and contributions to the open-source swiftlang&#x2F;swift-org-website repository. The Swift Information Architecture Project supports these changes, and thanks are extended to contributors for their efforts.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Swift at Apple: Migrating the Password Monitoring service from Java</title>
          <pubDate>Tue, 03 Jun 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-at-apple-migrating-the-password-monitoring-service-from-java/</link>
          <guid>https://peterspath.net/blog/dev-swift-at-apple-migrating-the-password-monitoring-service-from-java/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-at-apple-migrating-the-password-monitoring-service-from-java/">&lt;blockquote&gt;
&lt;p&gt;Swift is heavily used in production for building cloud services at Apple, with incredible results. Last year, the Password Monitoring service was rewritten in Swift, handling multiple billions of requests per day from devices all over the world. In comparison with the previous Java service, the updated backend delivers a 40% increase in performance, along with improved scalability, security, and availability.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-at-apple-migrating-the-password-monitoring-service-from-java&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;swift-at-apple-migrating-the-password-monitoring-service-from-java&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Password Monitoring service for Apple’s Passwords app, introduced in 2024, was rewritten from Java to Swift, achieving a 40% performance increase, better scalability, and lower resource usage.&lt;&#x2F;p&gt;
&lt;p&gt;Previously built on Python 2 and Google App Engine, the Java-based service faced slow response times and high memory demands, prompting a full rewrite using Swift’s Vapor framework, leveraging its protocols, async&#x2F;await, and safety features like optionals.&lt;&#x2F;p&gt;
&lt;p&gt;The Swift version reduced the codebase by 85%, improved latency to under 1 ms for 99.9% of requests, and cut memory usage significantly, running efficiently on Kubernetes with 50% less capacity.&lt;&#x2F;p&gt;
&lt;p&gt;Custom Swift packages for cryptography and middleware, combined with a robust ecosystem, supported the rewrite, demonstrating Swift’s suitability for high-performance, privacy-preserving cloud services.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>ICYMI: Memory Safety, Ecosystem Talks, and Java Interoperability at FOSDEM 2025</title>
          <pubDate>Tue, 06 May 2025 16:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-memory-safety-ecosystem-talks-java-interoperability-fosdem-2025/</link>
          <guid>https://peterspath.net/blog/dev-swift-memory-safety-ecosystem-talks-java-interoperability-fosdem-2025/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-memory-safety-ecosystem-talks-java-interoperability-fosdem-2025/">&lt;blockquote&gt;
&lt;p&gt;The Swift community had a strong presence at FOSDEM 2025, the world’s largest independently run open source conference, held every year in Brussels, Belgium. FOSDEM highlighted a range of Swift-related talks related to memory safety, a broad ecosystem around Swift including using it to develop web services and embedded projects, and new areas of the project including Java interoperability.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;memory-safety-ecosystem-talks-java-interoperability-fosdem-2025&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;memory-safety-ecosystem-talks-java-interoperability-fosdem-2025&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The Swift community showcased a robust presence at FOSDEM 2025, Europe&#x27;s largest open-source conference in Brussels, with talks emphasising memory safety, a diverse ecosystem for web services and embedded projects, and Java interoperability.&lt;&#x2F;p&gt;
&lt;p&gt;Doug Gregor&#x27;s main track presentation on &quot;Incremental Memory Safety in an Established Software Stack: Lessons Learned from Swift&quot; highlighted Swift&#x27;s memory-safe features and adoption lessons, with resources available in Swift&#x27;s documentation.&lt;&#x2F;p&gt;
&lt;p&gt;The inaugural Swift DevRoom, organised by Steven Van Impe, featured 12 talks including embedded applications like a ferrofluidic music visualiser, container image building, and distributed tracing in server-side Swift.&lt;&#x2F;p&gt;
&lt;p&gt;Konrad Malawski&#x27;s session in the Free Java DevRoom delved into Swift&#x2F;Java bindings for high-performance integration without full rewrites. This event underscores Swift&#x27;s growing role in open-source innovation, encouraging broader adoption of Swift 6&#x27;s data-race safety features across the ecosystem.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Swift 6.1 Released</title>
          <pubDate>Tue, 01 Apr 2025 17:00:00 +0000</pubDate>
          <author>hello@peterspath.net (Peter)</author>
          <link>https://peterspath.net/blog/dev-swift-6-1-released/</link>
          <guid>https://peterspath.net/blog/dev-swift-6-1-released/</guid>
          <description xml:base="https://peterspath.net/blog/dev-swift-6-1-released/">&lt;blockquote&gt;
&lt;p&gt;This release includes new language enhancements to improve productivity, diagnostics improvements, package traits, and ongoing work to improve data-race safety usability and compile times.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;→ &lt;a href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-6.1-released&#x2F;&quot;&gt;swift.org&#x2F;blog&#x2F;swift-6.1-released&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Swift 6.1 introduces enhancements to improve productivity and data-race safety, extending the nonisolated keyword to types and extensions for better concurrency control and improving task group type inference.&lt;&#x2F;p&gt;
&lt;p&gt;It adds the @objc @implementation attribute for porting Objective-C implementations to Swift, supports trailing commas in various syntactic contexts, and introduces package traits for conditional compilation in SwiftPM.&lt;&#x2F;p&gt;
&lt;p&gt;Swift Testing now supports custom traits for setup&#x2F;teardown logic, and Swift-DocC offers a more readable symbol link disambiguation method using parameter and return types. The release also enables background indexing for SwiftPM projects in SourceKit-LSP, enhancing editing features, and is available via Xcode 16.3 or the swiftly version manager for macOS and Linux.&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
