{"guid":"be5373a9-a74f-49e5-a9b0-7b82a42f4881","title":"SwiftUI is functional","subtitle":null,"slug":"bob11-2026-swift-ui-chakravarty","link":"https://bobkonf.de/2026/chakravarty.html","description":"Scaling modern user interfaces is hard. GUI libraries simplify getting complex interfaces on the screen, but keeping UI state in sync with application state is a challenge, exacerbated by asynchronous state changes (e.g., network activity). Avoiding callback hell, while keeping the application modular, avoiding UI glitches, and preventing data loss can quickly turn into a nightmare.\n          \n          This led to a plethora of software architectures, starting with the model-view-controller (MVC) and the model-view-update (MVU) architecture, exhibiting an object-oriented and a functional approach, respectively, with complementary strengths. MVC facilitates modularity, but handling of state and view updates is complex. Conversely, MVU simplifies state handling, but suffers from a lack of modularity.\n          \n          Modern approaches (e.g., React, Flux \u0026 reacl-c) work towards reconciling these opposites. In particular, SwiftUI is a declarative UI framework leveraging functional programming in Swift, including immutable data types and embedded domain-specific languages. It is focused on native apps and has been shown to scale from apps for smart watches to desktop applications, providing a declarative MVU approach while retaining excellent modularity.\n          \n          I will explain SwiftUI’s software architecture together with its core components, including the observation framework, bindings, the view protocol, and the render tree. In this talk, I will focus on the underlying concepts and not on a particular implementation.\n\nLicensed to the public under https://creativecommons.org/licenses/by/3.0/de","original_language":"eng","persons":["Manuel Chakravarty"],"view_count":8,"promoted":false,"date":"2026-03-13T17:50:00.000+01:00","release_date":"2026-05-19T00:00:00.000+02:00","updated_at":"2026-05-19T23:24:20.212+02:00","tags":["16","2026","bob2026","Talk","Talks #2","bob2026-eng","BOB","BOB Konferenz","Day 1"],"length":2659,"duration":2659,"thumb_url":"https://static.media.ccc.de/media/events/bobkonf/2026/16-be5373a9-a74f-49e5-a9b0-7b82a42f4881.jpg","poster_url":"https://static.media.ccc.de/media/events/bobkonf/2026/16-be5373a9-a74f-49e5-a9b0-7b82a42f4881_preview.jpg","timeline_url":"https://static.media.ccc.de/media/events/bobkonf/2026/16-be5373a9-a74f-49e5-a9b0-7b82a42f4881.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/events/bobkonf/2026/16-be5373a9-a74f-49e5-a9b0-7b82a42f4881.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/bob11-2026-swift-ui-chakravarty","url":"https://api.media.ccc.de/public/events/be5373a9-a74f-49e5-a9b0-7b82a42f4881","conference_title":"BOB Konferenz 2026","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2026","related":[],"recordings":[{"size":214,"length":2659,"mime_type":"video/webm","language":"eng","filename":"bob2026-16-eng-SwiftUI_is_functional_webm-hd.webm","state":"new","folder":"webm-hd","high_quality":true,"width":2560,"height":1440,"updated_at":"2026-05-19T23:24:20.169+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2026/webm-hd/bob2026-16-eng-SwiftUI_is_functional_webm-hd.webm","url":"https://api.media.ccc.de/public/recordings/100749","event_url":"https://api.media.ccc.de/public/events/be5373a9-a74f-49e5-a9b0-7b82a42f4881","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2026"},{"size":27,"length":2659,"mime_type":"audio/opus","language":"eng","filename":"bob2026-16-eng-SwiftUI_is_functional_opus.opus","state":"new","folder":"opus","high_quality":false,"width":0,"height":0,"updated_at":"2026-05-19T22:36:55.158+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2026/opus/bob2026-16-eng-SwiftUI_is_functional_opus.opus","url":"https://api.media.ccc.de/public/recordings/100747","event_url":"https://api.media.ccc.de/public/events/be5373a9-a74f-49e5-a9b0-7b82a42f4881","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2026"},{"size":40,"length":2659,"mime_type":"audio/mpeg","language":"eng","filename":"bob2026-16-eng-SwiftUI_is_functional_mp3.mp3","state":"new","folder":"mp3","high_quality":false,"width":0,"height":0,"updated_at":"2026-05-19T22:36:51.247+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2026/mp3/bob2026-16-eng-SwiftUI_is_functional_mp3.mp3","url":"https://api.media.ccc.de/public/recordings/100746","event_url":"https://api.media.ccc.de/public/events/be5373a9-a74f-49e5-a9b0-7b82a42f4881","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2026"},{"size":60,"length":2659,"mime_type":"video/mp4","language":"eng","filename":"bob2026-16-eng-SwiftUI_is_functional_sd.mp4","state":"new","folder":"h264-sd","high_quality":false,"width":720,"height":576,"updated_at":"2026-05-19T22:25:32.198+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2026/h264-sd/bob2026-16-eng-SwiftUI_is_functional_sd.mp4","url":"https://api.media.ccc.de/public/recordings/100744","event_url":"https://api.media.ccc.de/public/events/be5373a9-a74f-49e5-a9b0-7b82a42f4881","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2026"},{"size":143,"length":2659,"mime_type":"video/mp4","language":"eng","filename":"bob2026-16-eng-SwiftUI_is_functional_hd.mp4","state":"new","folder":"h264-hd","high_quality":true,"width":2560,"height":1440,"updated_at":"2026-05-19T19:47:11.219+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2026/h264-hd/bob2026-16-eng-SwiftUI_is_functional_hd.mp4","url":"https://api.media.ccc.de/public/recordings/100691","event_url":"https://api.media.ccc.de/public/events/be5373a9-a74f-49e5-a9b0-7b82a42f4881","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2026"}]}