Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Djangocon EU: Oh, I found a security issue - Markus Holtermann
(One of my summaries of the 2026 Djangocon EU in Athens). Markus is member of the Django security team. The important document is https://docs.djangoproject.com/en/dev/internals/security/ , how to report security issues, how the security team will evaluate it, which versions will include a fix (if needed) and how it gets disclosed. If you think you found an issue? Mail it to security@djangoproject.com. Don't start off writing lots of text, just provide a brief description and how to reproduce it. A fix is even better. And: don't report issues that are corner cases that go against normal web development and regular Django practice. If you take unfiltered, unvalidated user input and manage to do code injection: well, don't do that :-) The security team triages the issue. If it is valid, they try to fix it. And if there's a fix, they check it with the original reporter. Such development doesn't happen in public, of course. If there's a fix, they assign the issue a CVE number. Since last year, the Django project is its own (and only) CVE assigner. And they prepare the various Django version releases beforehand. Then the problem + the releases with the fixes are announced. Mailinglist, news β¦ -
Djangocon EU: ATLAS, case study of Django in the public sector - Georgios Poulos
(One of my summaries of the 2026 Djangocon EU in Athens). Full title: ATLAS: building a zeroβbudget IT service management platform with Django in the public sector. Georgios likes Django because it inspired him to think clearly about structure, workflow and architecting real-world systems. Projects don't fail because of technology. They fail because workflows are not clear and because the system doesn't show what is happening. Clarity is what you need. Meaningful metrics. Maintainability. The area for which he build the Atlas system was IT support. IT support originally was done by email and phone calls: completely unstructured. They now support 20500 employees... The problem: scaling without a system. Who owns what? Who's looking at what issue? The real problem was unstructured requests and lack of accountability. No visibility of the process, so you can only react. Atlas solves it by having a central Django workflow system. The user starts with a single form they need to fill in. Simple: fewer choices, fewer mistakes. Predictablility counts for a lot in internal systems. Workflow states are central. New/assigned/in progress/waiting/closed. Tickets move between those state based on explicit business rules. And timers to watch out for tickets being in the same state β¦ -
Djangocon EU: AI-assisted contributions and maintainer load - Paolo Melchiorre
(One of my summaries of the 2026 Djangocon EU in Athens). Paolo is very active in the Django community. He's seeing more and more problems crop up for maintainers, related to AI-assisted contributions. He showed two quotes that seem to be about AI, but were really about something else: "It cripples the mind": Edsger Dijkstra (shortest path algorithm creator) in 1975, talking about the Cobol language. "You can't trust code that you didn't totally create yourself": Ken Thompson (Unix creator), talking about code within his own company. New technologies aren't always welcomed with open arms. He then showed an AI-adjusted/improved image of Django-the-guitar-player. With six fingers on his left hand and a too-modern guitar and amplifier. Amplification: that's what might happen with Django: More contributors, but also more low-value contributions. More code, but also more untested code. What will happen? He showed some examples from other projects. Being swamped with low-quality pull requests, for instance. Within the Django community, the jazzband project is stopping: there were more reasons, but "AI slop" was one of them. In matplotlib, an AI pull request was closed. Then the AI bot wrote a blog entry complaining about it and started attacking the open source β¦ -
Djangocon EU: reliable Django signals - Haki Benita
(One of my summaries of the 2026 Djangocon EU in Athens). He's going to talk about: A pattern for decoupling modules in complicated systems Reliable and fault-tolerant workflows in your elaborate Django apps. (A workflow is a set of actions, like "select product", "place order", "pay"). For the payment example, you probably use a third party. You create a payment in the third party payment processor. The user provides details at the processor. After some time, the payment processor sends back some completion information. The completion info can contain "succeeded" or "failed". Handling the order is a bit more complicated. You have the order itself with its own workflow ("placed", "payment_succeeded", "sent", "received"). But this workflow also depends on the payment workflow. So two processes intertwined. Both have a webhook ("order placed" and "third party processor finished"). When the payment processor is finished, the webhook for the payment cannot normally talk to the Order model. If Order needs to talk to Payment and Payment to Order, you get circular dependencies. You can work around it, but this example only has a two-way relation. In a real order+payment example you also have refunds, customers and lots more. You get spaghetti code. β¦ -
Djangocon EU: scaling the database, using multiple databases with Django - Jake Howard
(One of my summaries of the 2026 Djangocon EU in Athens). (Jake is the author of Django tasks, mentioned before at the conference. He's also in this week's Django podcast.) Scaling: horizontal and vertical. Horizontal: more machines. Vertical: more resources per machine. Horizontal scaling is often easier. Just start more django processes on more servers. But... often there's still only one database server. Databases aren't typical applications. They bring enormous speed and features, but have a big requirement: there's only one database server that's allowed to write to its data. One thing you can do is sharding: splitting up your data over multiple database servers. You need to think hard about this, as moving data afterwards is hard. And there are foreign key problems. You can improve scaling in a simpler way, with syncing: a primary with multiple replicas. Writing only happens to one databases, this syncs to the replicas (often in milliseconds). When you want Django to talk to them, you need a load balancer (pb_bouncer and so) in front of the replicas for the read traffic. Note: you don't want to use the primary for reading for performance reasons. Django allows multiple databases: DATABASES = { "default": {.....}, β¦ -
Djangocon EU: partitioning very large tables with Django and Postgresql - Tim Bell
(One of my summaries of the 2026 Djangocon EU in Athens). The company where he works (Kraken) had an issue with vacuuming. 2TB table, 9 billion rows. 20-30 million row updates per day. The necessary vacuuming would take 16-20 hours every day. Partitioning seems a good idea. There aren't a lot of resources to read or watch. One of the best is a talk by Karen Jex. When to partition? Size over 100 GB or more than 100 million rows. You should rather not partition unless you really need to. In their case, vacuuming provided the reason. Vaccuuming a partial table takes much less time. Table partitioning: each row belongs in a partition based on a "partition key", the value and a set of bounds/rules. So "id 1-1000 in partition 1, 1001-2000 in 2". Which partition method to choose? Range, list, or hash? Look at your application, really design it from the ground up to work with partitioning in mind. How do you access your data? How do you want to purge data? Django abstracts away the complexity of the database, but the abstraction can be a bit leaky. Database partitions can be something that leaks through. Partitioned tables don't β¦ -
Djangocon EU: lightning talks
(One of my summaries of the 2026 Djangocon EU in Athens). Note: "live-blogging lightning talks" means "I missed some names or mis-spelled them" :-) Faster delivery with feature flags - Miha Zidar Feature flags are often used for continuous delivery. You need to watch out with tests: do you need to run all of them twice, with and without the feature flag? And: remember to clean up the feature flags. Make them easy to remove. So only "if FEATURE .... else .....". Only use them to make deployment safer and faster Lessons from being an admin at Djangonaut Space - Raphaella Suardini https://djangonaut.space is a mentorship program to help you get into Django. All volunteers. There are some communication challenges when working with volunteers. People with different native languages. And you don't want to communicate too often, but you also want to communicate all that's necessary... There's an invisible workload: if you're an admin, you're partially also taking on resposibilities of others that might drop some tasks. Make decisions. Take care of your work/volunteer/life balance. Djangonaut space really helps people, which motivates her a lot and helps keep her volunteering her time and effort. Priming AI with atomic docs - β¦ -
Djangocon EU: Django forms in the age of HTMX: the single field form - Hanne Moa
(One of my summaries of the 2026 Djangocon EU in Athens). You can go totally overboard with forms. Forms nested in forms. A list of forms. A recursive list of forms. She had to work with lots of elaborate forms/questionaires that needed to have many variants. Especially questionaires can drive you crazy with their dynamic form behaviour. A solution is to have a single field at the time. So: many forms with one single field. A little piece of htmx can load the single field forms when you click their "edit" button. Some example code is at https://github.com/Uninett/singlefieldform . (The presentation is there, too, in the slides/ directory). As an example, she showed a user preferences form. For every new preference, you only need to add an extra "single field form" which works on its own. Handy. The magic is that every field inherits from a SingleFieldMixin, which registers itself with the "main form page" registry. The main form page can iterate over the single field forms. Tip: using subclasses is the easiest way to get a plugin mechanism to work. (But de-activating the mechanisim is hard.) Unrelated photo explanation: a recent trip to the "Modellbundesbahn" in Germany. The same β¦ -
Representing 'Jobs to be Done' in a project
I have had this idea/theory for a while, that most software tools would benefit from a simple built in todo list built into the product directly. The main idea is for users to create jobs themselves or for the system itself to create jobs for the user to complete. The general thesis for this idea comes from a direct reference to the term "Jobs to be done". Any piece of software that gets used, exists to complete a job and do it better than the solution before it. Well over the last couple of months I have turned this idea into a reality inside Hamilton Rock, or at least the first version of it and so far it seems very promising. The general API design is a few custom signals, a model and some signal reciever functions for the custom signals. The rest of the project interacts solely through the custom signals job_requested and job_completed. Each does as you would expect, job_requested requests a job be created, job_completed complete the related job to the model instance given. The core of the job model has a status, type and a generic foreign key which forms the target related to the job. β¦ -
Built with Django Weekly Roundup: Mar 23 to Apr 13
Hey, Happy Monday! Why are you getting this: You signed up to receive this newsletter on Built with Django. I share recent projects, jobs, and useful Django links. If you no longer want this, you can unsubscribe anytime. News and Updates This issue covers March 23rd through April 13th. I widened the window this time so we capture the full recent batch of good additions. Sponsor This issue is sponsored by TuxSEO, your content team on auto-pilot. Generate SEO-focused content briefs and drafts faster, and ship consistently without the usual content bottlenecks. Projects Master Grammar - English grammar learning platform with structured lessons and tests. Built for english learners to master their grammar and achieve TOEIC/IELTS score target. Echoflare Managed Services - Professional Managed IT Services for Toronto Businesses My IT Fleet - Advanced IT Service Hub with advanced ticket approval flow , IT Asset inventory tracking, and It Fleet health intelligence. Jobs Backend Engineer at Twindo (Formerly Canvas) β Remote Lead Engineer (Backend) at Onos Health β Remote Fullstack Engineer (backend-leaning) at Pinwheel β Hybrid (NYC - Union Square) B2B SaaS) at Weave Bio β San Francisco (SF), Hybrid/Onsite 3 days/week Product Engineer at Baserow β Remote Senior Software β¦ -
djust 0.4.0 β The Developer Experience Release
djust 0.4.0 ships 30+ features focused on developer experience: flash messages, keyboard shortcuts, form recovery, scaffolding generators, debug tooling, and security hardening. Build real-time Django apps with less code than ever. -
Django News - DjangoCon Europe Next Week! - Apr 10th 2026
Introduction Hi everyone, sorry for the late send of Issue #331. Last week, our provider, Curated, which is owned by Buttondown, went down and wasnβt able to send our newsletter for six days. You might have received it yesterday, but not everyone did. Itβs the first time in several years we havenβt been able to land in your inbox. Weβve been in touch with their support all week and appreciate your patience while this gets sorted out. In the meantime, Will and I are looking at other provider options. If this shows up next week looking a little different, thatβs probably why. If you missed it, please check out last weekβs Issue 331: https://django-news.com/issues/331#start Django Newsletter News Django security releases issued: 6.0.4, 5.2.13, and 4.2.30 Django 4.2 has reached the end of extended support. Five CVEs (security vulnerabilities) fixed in this latest update. djangoproject.com DjangoCon Europe is next week! April 15-19 in Athens, Greece. There is a Django.Social event the night before, April 14th, 6-10pm, at Ipitou The Bar, organized by Jon Gould of Foxley Talent and Andrew Miller. djangocon.eu Updates to Django Today, "Updates to Django" is presented by Pradhvan from Djangonaut Space! π Last week we had 14 β¦ -
DjangoCon Europe Next Week!
Introduction Hi everyone, sorry for the late send of Issue #331. Last week, our provider, Curated, which is owned by Buttondown, went down and wasnβt able to send our newsletter for six days. You might have received it yesterday, but not everyone did. Itβs the first time in several years we havenβt been able to land in your inbox. Weβve been in touch with their support all week and appreciate your patience while this gets sorted out. In the meantime, Will and I are looking at other provider options. If this shows up next week looking a little different, thatβs probably why. If you missed it, please check out last weekβs Issue 331: https://django-news.com/issues/331#start News Django security releases issued: 6.0.4, 5.2.13, and 4.2.30 Django 4.2 has reached the end of extended support. Five CVEs (security vulnerabilities) fixed in this latest update. DjangoCon Europe is next week! April 15-19 in Athens, Greece. There is a Django.Social event the night before, April 14th, 6-10pm, at Ipitou The Bar, organized by Jon Gould of Foxley Talent and Andrew Miller. Updates to Django Today, "Updates to Django" is presented by Pradhvan from Djangonaut Space! π Last week we had 14 pull requests merged into β¦ -
Switching all of my Python packages to PyPI trusted publishing
Switching all of my Python packages to PyPI trusted publishing As I have teased on Mastodon, I’m switching all of my packages to PyPI trusted publishing. I have been using it to release the django-debug-toolbar a few times but never set it up myself. The process seemed tedious. The malicious releases uploaded to PyPI two weeks ago and the blog post about digital attestations in pylock.toml finally pushed me to make the switch. All of my PyPI tokens have been revoked so there is no quick shortcut. Note I’m also looking at other code hosting platforms. I have been using git before GitHub existed and I’ll probably still use git when GitHub has completed its enshittification. For now the cost/benefit ratio of staying on GitHub is still positive for me. Trusted publishing isn’t available everywhere, so for now it is GitHub anyway. In the end, switching an existing project was easier than expected. I have completed the process for django-prose-editor and feincms3-cookiecontrol. For my future benefit, here are the step by step instructions I have to follow: Have a package which is buildable using e.g. uvx build On PyPI add a trusted publisher in the project’s publishing settings: Owner: matthiask, β¦ -
New Package: Django Dependency Map
I have recently been reading Swizec Teller's new book Scaling Fast and in it he mentions architectural complexity, which reminded me of my desire for a tool that combines database dependencies between Django apps and import dependencies between Django apps. To date, I have used other tools such as graph models from Django extensions, import-linter is the most recent one, and pyreverse from Pylint. They all do bits of the job, but require manual stitching together to get a cohesive graph of everything overlaid in the right way. So I remembered about this, and so over the last couple of days, I've built a new package which combines all of this into a live view which updates as you build your app, a management command and a panel for Debug Toolbar. Why the Django app level, you ask? Primarily, I do find models good, but they can get a little too complicated and a little you get a few too many lines and doing imports at the module level within an app or like separating it all out, again, you lose it becomes there becomes too much noise to signal to really understand the logical relationship between different components in β¦ -
How I configured OpenClaw's multi-model setup (so you don't have to)
A heads up before we start: over 95% of this blog post was written by my OpenClaw bot running GLM-5. I reviewed, edited, and approved everything, but credit where it’s due: Tepui β°οΈ (yes, I named my AI) did most of the heavy lifting. I need to vent, but in a good way this time. Last week I vented about Anthropic pushing away paying customers. After that third-party ban hit, I had to rip out Claude Opus 4.6 from my OpenClaw setup and find alternatives. So I rebuilt the whole thing from scratch. This time, I did it right. What I wanted I use OpenClaw as my personal AI assistant. It connects to my Telegram, manages my calendar, runs cron jobs, helps with research, and generally makes my life easier. Before the ban, it was running Claude Opus 4.6. After the ban, I needed alternatives. My requirements were simple: Free or cheap (Lazer’s LiteLLM proxy gives us free access to certain models) A text model for daily use (fast, capable reasoning) A vision model for images and PDFs (I send screenshots, receipts, documents) Image generation (sometimes I need to create images) A fallback if something breaks What I got was β¦ -
I've Been the Sole Developer of a Healthcare Membership Platform for 6+ Years. Here's What It Looks Like.
A few years back, a healthcare professional association reached out to me. They regulate and support thousands of practitioners across their region: licensing, insurance, events, the whole deal. Their website couldn't keep up. What they needed was a platform that could handle member applications, renewals, payments, event registrations, an β¦ Read now -
I patched GSD, and why you should patch it too
GSD (Get Shit Done) is one of the best things that’s happened to my development workflow. If you haven’t heard of it, it’s a meta-prompting and context engineering system for Claude Code (and OpenCode). It breaks your work into milestones and phases, spawns fresh subagents with clean contexts for each task, and solves the context rot problem that kills quality in long AI sessions. I wrote about my full setup on my AI toolbox page. GSD is great out of the box. But I wanted it to be mine. I’ve been using GSD daily for weeks now, and over time I kept bumping into the same friction points: the plan review was too shallow, the verification step was too manual, and the UI audit felt incomplete. So I did what any developer would do. I patched it. This post is about the three patches I made, how they work, why I made them, and how you can build your own. More importantly, it’s about why you should be patching your tools. Not just GSD; any tool you use daily. The philosophy: own your tools Here’s the thing about AI tools right now: we’re at a point in time where you β¦ -
Anthropic is pushing away its paying customers
I need to vent. I want to start by saying this is my opinion and doesn’t reflect the views of my employers or anyone else. I’ve been paying $100/month for Claude Max because Claude is, without question, the best model for programming. I’ve built my entire AI workflow around it. I’ve written blog posts about it. I’ve recommended it to colleagues, friends, and strangers on the internet. I’ve been a loyal, paying customer. And Anthropic keeps making it harder to stay. The third-party ban On the night of April 3, 2026, Anthropic sent an email to subscribers announcing that third-party harnesses like OpenClaw can no longer use Claude Max subscription limits. Starting April 4 at 12pm PT. That’s less than 24 hours of notice. Ouch. Let that sink in. Less than 24 hours to rip out and replace the model powering my personal AI assistant, my Emacs tooling, and potentially other parts of my workflow. My OpenClaw setup was running Opus 4.6 for personal tasks: managing my calendar, maintaining my open source projects, doing research, all through Telegram. It was perfect. Now if I want to keep using Claude with OpenClaw, I need to pay extra on top of my β¦ -
Django News - Supply Chain Wake-Up Call - Apr 3rd 2026
News Incident Report: LiteLLM/Telnyx supply-chain attacks, with guidance A recent supply chain attack on popular PyPI packages exposed how quickly malware can spread through unpinned dependenciesβand why practices like dependency locking and cooldowns are now essential for Python developers. pypi.org The PyCon US 2026 schedule is live π΄π plus security updates, community programs & more PyCon US 2026 heads to Long Beach with its schedule now live, alongside major Python ecosystem updates spanning security improvements, new community programs, and ongoing PSF initiatives. mailchi.mp Django Software Foundation DSF Board Meeting Minutes, March 12, 2026 DSF approved trademark renewal plans, advanced a long-awaited Code of Conduct update, and continued shaping community governance and outreach efforts. django.github.io Wagtail CMS News How to Generate SEO Descriptions for Your Entire Wagtail Site at Once β‘ Use Wagtail AIβs built-in LLM pipeline to bulk-generate SEO meta descriptions across your entire site in minutes with a simple Django management command. timonweb.com How to Show a Waitlist Until Your Wagtail Site Is Ready A clever Django and Wagtail pattern for launching with a waitlist while selectively granting preview access using secure cookies and a simple passphrase gate. djangotricks.com Build Dynamic Campaign Landing Pages in Wagtail Use a single β¦ -
Supply Chain Wake-Up Call
News Incident Report: LiteLLM/Telnyx supply-chain attacks, with guidance A recent supply chain attack on popular PyPI packages exposed how quickly malware can spread through unpinned dependenciesβand why practices like dependency locking and cooldowns are now essential for Python developers. The PyCon US 2026 schedule is live π΄π plus security updates, community programs & more PyCon US 2026 heads to Long Beach with its schedule now live, alongside major Python ecosystem updates spanning security improvements, new community programs, and ongoing PSF initiatives. Django Software Foundation DSF Board Meeting Minutes, March 12, 2026 DSF approved trademark renewal plans, advanced a long-awaited Code of Conduct update, and continued shaping community governance and outreach efforts. Wagtail CMS News How to Generate SEO Descriptions for Your Entire Wagtail Site at Once β‘ Use Wagtail AIβs built-in LLM pipeline to bulk-generate SEO meta descriptions across your entire site in minutes with a simple Django management command. How to Show a Waitlist Until Your Wagtail Site Is Ready A clever Django and Wagtail pattern for launching with a waitlist while selectively granting preview access using secure cookies and a simple passphrase gate. Build Dynamic Campaign Landing Pages in Wagtail Use a single Wagtail page with dynamic routing, β¦ -
OpenCode as a server: AI agents that work while I sleep
My main machine is a beast. Ryzen 9 9950X3D, 64 GB of RAM, RX 9060 XT, three monitors, the works. It barely ever shuts off. So at some point I started thinking: why isn’t this thing working for me when I’m not sitting in front of it? The answer is now: it does. I’m running OpenCode as a persistent server on this machine, accessible from anywhere through my WireGuard VPN. I can spin up coding sessions from my MacBook Air, my phone, wherever. And the best part? I have scheduled jobs that run overnight: adding tests, updating documentation, enforcing code conventions. I wake up to PRs waiting for my review. Here’s the full setup. The architecture βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β roger-beast β β (Ryzen 9 9950X3D / 64GB) β β β β ββββββββββββββββββββ ββββββββββββββββββββββββ β β β opencode serve ββββββββ systemd user service β β β β :4096 (web UI) β β (auto-start/restart) β β β ββββββββββ¬ββββββββββ ββββββββββββββββββββββββ β β β β β β ββββββββββββββββββββββββ β β β β opencode-scheduler β β β β β (systemd timers) β β β β β ββββββββββββββββββββ β β β β β β 2am: add tests β β β β β β β 3am: update docs β¦ -
Python Leiden (NL) meetup: newwave, python package setup and cpython contribution - Michiel Beijen
(One of my summaries of the Leiden (NL) Python meetup). Wave audio is more or less the original representation of digital audio. .wav format (there are competing formats like .au or .aiff). Typically it is "PCM-encoded", just as what comes out of the CD. The .wav format was introduced by microsoft in windows 3.1 in 1992. But... it is still relevant for audio production or podcasts. And: for lab equipment. The company Michiel works for (https://samotics.com/, sponsor of the meetup's pizza, thanks!) records the sound of big motors and other big equipment for analysis purposes. They use .wav for this. Around 1992, Python also started to exist. Version 1.0 (1994) included the "wave" module in its standard library. But: it is only intended for regular .wav usage, so two stereo channels and max 44.1 kHz frequency. He needed three channels (for sound recordings for the three phases of the electrical motor) and he needed higher resolution. He showed that you could actually put three channels into a .wav with Python. Audacity loaded it just fine, but the "flac" encoder refused it, with an error about a missing WAVE_FORMAT_EXTENSIBLE setting. He started investigating the python bugtracker and discovered someone had already β¦ -
Python Leiden (NL) meetup: creating QR codes with python - Rob Zwartenkot
(One of my summaries of the Leiden (NL) Python meetup). Qr codes are everywhere. They're used to transport data, the best example is a link to a website, but you can use them for a lot of things. A nice different usage is a WIFI connection string, something like WIFI:T:WPA;S:NetworkName;p:password;; . Rob focuses on the url kind. There's a standard, ISO/IEC 18004. QR codes need to be square. With a bit of a margin around it. The cells should also be square. You sometimes see somewhat rounded cells, but that's not according to the standard. You sometimes see a logo in the middle, but that actually destroys data! Luckily there's error correction in the standard, that's the only reason why it works. There's more to QR codes than you think! He uses the segno as qr code library (instead of "qrcode"). It is more complete, allows multiple output formats, it can control error correction: import segno qr = segno.make("https://pythonleiden.nl/") qr.save("leiden.png") Such an image is very small. If you scale it, it gets blurry. And there's no border and no error correction. We can do better: import segno qr = segno.make("https://pythonleiden.nl/", error="h") # "h" is the "high" level of error correction, β¦ -
Python Leiden (NL) meetup: building apps with streamlit - DaniΓ«l Kentrop
(One of my summaries of the Leiden (NL) Python meetup). DaniΓ«l is a civil engineer turned software developer. He works for a company involved in improving the 17000 km of dikes in the Netherlands. He liked programming, but interfacing with his colleagues was a bit problematic. Jupyter notebooks without a venv? Interfaces with QT (which explode in size)? PyInstaller? In the end, he often opted for data in an excel sheet and then running a python script... He now likes to use streamlit, a Python library for creating simple web apps, prototyping, visualisation. It has lots of build-in elements and widgets. Data entry, all sorts of (plotly) charts, sliders, selectboxes, pop-ups, basically everything you need. You can add custom components with html/css/js. How does it work? It is basically a script. The whole page is loaded every time and re-run. A widget interaction means a re-run. Pressing a button means a re-run. There is state you can store on the server per session. He showed a demo demonstrating the problems caused by the constant re-running (and losing of state) and how to solve it with the session state. He then showed a bigger streamlit demo. On a map, you could β¦