[{"data":1,"prerenderedAt":674},["ShallowReactive",2],{"footer-primary":3,"footer-secondary":93,"footer-description":119,"tv-the-changelog":121,"tv-the-changelog-seasons":131,"tv-the-changelog-episodes":161,"sales-reps":422},{"items":4},[5,29,49,69],{"id":6,"title":7,"url":8,"page":8,"children":9},"522e608a-77b0-4333-820d-d4f44be2ade1","Solutions",null,[10,15,20,25],{"id":11,"title":12,"url":8,"page":13},"fcafe85a-a798-4710-9e7a-776fe413aae5","Headless CMS",{"permalink":14},"/solutions/headless-cms",{"id":16,"title":17,"url":8,"page":18},"79972923-93cf-4777-9e32-5c9b0315fc10","Backend-as-a-Service",{"permalink":19},"/solutions/backend-as-a-service",{"id":21,"title":22,"url":8,"page":23},"0fa8d0c1-7b64-4f6f-939d-d7fdb99fc407","Product Information",{"permalink":24},"/solutions/product-information-management",{"id":26,"title":27,"url":28,"page":8},"63946d54-6052-4780-8ff4-91f5a9931dcc","100+ Things to Build","https://directus.io/blog/100-tools-apps-and-platforms-you-can-build-with-directus",{"id":30,"title":31,"url":8,"page":8,"children":32},"8ab4f9b1-f3e2-44d6-919b-011d91fe072f","Resources",[33,37,41,45],{"id":34,"title":35,"url":36,"page":8},"f951fb84-8777-4b84-9e91-996fe9d25483","Documentation","https://docs.directus.io",{"id":38,"title":39,"url":40,"page":8},"366febc7-a538-4c08-a326-e6204957f1e3","Guides","https://docs.directus.io/guides/",{"id":42,"title":43,"url":44,"page":8},"aeb9128e-1c5f-417f-863c-2449416433cd","Community","https://directus.chat",{"id":46,"title":47,"url":48,"page":8},"da1c2ed8-0a77-49b0-a903-49c56cb07de5","Release Notes","https://github.com/directus/directus/releases",{"id":50,"title":51,"url":8,"page":8,"children":52},"d61fae8c-7502-494a-822f-19ecff3d0256","Support",[53,57,61,65],{"id":54,"title":55,"url":56,"page":8},"8c43c781-7ebd-475f-a931-747e293c0a88","Issue Tracker","https://github.com/directus/directus/issues",{"id":58,"title":59,"url":60,"page":8},"d77bb78e-cf7b-4e01-932a-514414ba49d3","Feature Requests","https://github.com/directus/directus/discussions?discussions_q=is:open+sort:top",{"id":62,"title":63,"url":64,"page":8},"4346be2b-2c53-476e-b53b-becacec626a6","Community Chat","https://discord.com/channels/725371605378924594/741317677397704757",{"id":66,"title":67,"url":68,"page":8},"26c115d2-49f7-4edc-935e-d37d427fb89d","Cloud Dashboard","https://directus.cloud",{"id":70,"title":71,"url":8,"page":8,"children":72},"49141403-4f20-44ac-8453-25ace1265812","Organization",[73,78,84,88],{"id":74,"title":75,"url":76,"page":77},"1f36ea92-8a5e-47c8-914c-9822a8b9538a","About","/about",{"permalink":76},{"id":79,"title":80,"url":81,"page":82},"b84bf525-5471-4b14-a93c-225f6c386005","Careers","#",{"permalink":83},"/careers",{"id":85,"title":86,"url":87,"page":8},"86aabc3a-433d-434b-9efa-ad1d34be0a34","Brand Assets","https://drive.google.com/drive/folders/1lBOTba4RaA5ikqOn8Ewo4RYzD0XcymG9?usp=sharing",{"id":89,"title":90,"url":8,"page":91},"8d2fa1e3-198e-4405-81e1-2ceb858bc237","Contact",{"permalink":92},"/contact",{"items":94},[95,101,107,113],{"id":96,"title":97,"url":8,"page":98,"children":100},"8a1b7bfa-429d-4ffc-a650-2a5fdcf356da","Cloud Policies",{"permalink":99},"/cloud-policies",[],{"id":102,"title":103,"url":81,"page":104,"children":106},"bea848ef-828f-4306-8017-6b00ec5d4a0c","License",{"permalink":105},"/bsl",[],{"id":108,"title":109,"url":81,"page":110,"children":112},"4e914f47-4bee-42b7-b445-3119ee4196ef","Terms",{"permalink":111},"/terms",[],{"id":114,"title":115,"url":81,"page":116,"children":118},"ea69eda6-d317-4981-8421-fcabb1826bfd","Privacy",{"permalink":117},"/privacy",[],{"description":120},"\u003Cp>A composable backend to build your Headless CMS, BaaS, and more.&nbsp;\u003C/p>",{"id":122,"title":123,"logo":124,"cover":125,"tile":126,"announcement_text":8,"description":127,"slug":128,"one_liner":129,"card_text":8,"status":130,"sort":8},"325db7c3-f62a-484d-883e-b49f08738e2b","The Changelog","a11abcbb-e1b8-446d-a1ad-d67d035f02c3","30bbf32f-0846-4275-8da4-4816a8171c50","de6f3b4b-3c36-4142-819b-3312690e08a1","Each month, some of the Directus team talk through what’s new including core releases, new content and new extensions, plus guests showcasing community highlights.","the-changelog","A monthly rundown of what is new with Directus.","published",[132,138,151],{"id":133,"number":134,"show":122,"year":135,"episodes":136},"e1a5a496-3320-4bb4-8267-8fec1c7c5f57",3,"2026",[137],"6f059d81-f200-4dc7-88db-cb29239b3979",{"id":139,"number":140,"show":122,"year":141,"episodes":142},"8d55b0f7-e337-475c-99c7-3b65612fbcff",2,"2025",[143,144,145,146,147,148,149,150],"b730c9d0-30fb-4eff-b4b6-5be61826c8c0","c14eb0dd-301c-412e-b15f-a81dfe7c1265","0ed97d3a-f55b-497e-a5c1-5812814a841e","89e3526f-dcfc-4280-96bb-126465f340f3","24ba631d-1e9f-4c47-b4eb-3f72e60dd0cd","7dd74ad6-eca6-4193-851e-8e4322847794","c181631f-45fb-4190-9f78-760fdf735bd6","3d916baf-bb4c-4fa7-8d0d-a7beb07945ff",{"id":152,"number":153,"show":122,"year":154,"episodes":155},"093d2e2b-8006-4f05-a00c-22f124332e56",1,"2024",[156,157,158,159,160],"07591f9d-8187-47fd-9904-92eda024043a","61e8a740-8f60-40e8-9fc3-d9bcda53d16b","a5361f29-432a-4602-ae17-57da36b48d19","cfcf16eb-9630-4423-9f83-0fe27ef57f85","11513676-0e94-4407-bee0-387ae2bca2ac",[162,180,198,217,237,258,278,297,317,336,355,372,388,405],{"id":156,"slug":163,"vimeo_id":164,"description":165,"tile":166,"length":167,"resources":8,"people":8,"episode_number":153,"published":168,"title":169,"video_transcript_html":170,"video_transcript_text":171,"content":8,"seo":172,"status":130,"episode_people":173,"recommendations":177,"season":178},"1-august-2024","1003271030","Join us for The Changelog, a new way of taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes the MUX Uploader extension contribution, Hannes talking though solving hard problems with the Directus 11 access policies and Kevin with a tutorial on using the Directus UI library in extensions.","5ca9dc07-11c8-4350-9103-63f54c62f804",38,"2024-08-27","August 2024","\u003Cp>Speaker 0: Welcome to the changelog everyone. This is the first of, regular recurring monthly event that we're hoping to do, showing you what is next, new with Directus. So hi. I'm Beth. I am in the developer experience team here with Directus.\u003C/p>\u003Cp>We would really like to hear your feedback on this event and what we've got in it and what you'd like to see from us in the future. So with that being said, the first set of is with Kevin.\u003C/p>\u003Cp>Speaker 1: We are going to kick off the changelog with what is probably the most significant announcement for today, and that is the full release of 11. Following on from the release candidate, which we announced in June at our last leap week. And the headline feature of directors 11 is our brand new permission system, which is now based on policies. This is a big shift in how directors handles access control, giving you more power and flexibility by creating reusable sets of permissions. Now of course I can just sit here and talk to you about it, but I've prepared a little demo because I think that's gonna be a little bit better.\u003C/p>\u003Cp>So let's go over to my screen and I'll show you around. In this demo of directors 11, we are managing a restaurant. And there are 4 collections, staff, shifts, bookings, and sales. And here in the settings, we have this new access policies section, which allows you to manage the new access policies feature. Now I've created a number of policies, each with their own set of permissions.\u003C/p>\u003Cp>If we look at bookings manage, we see that this policy allows for full, permissions in the bookings collection. And I've also created others to allow users just to add new sales or perhaps to manage sales providing full CRUD access. If we head over to this shifts view policy, we see that there are a number of permissions across multiple collections. Here, there is full read permissions over the shifts collection and partial read access over the staff collection. And specifically here, we're only allowing users with this policy to see the names of staff and no other information.\u003C/p>\u003Cp>Now policies can be attached to either users or roles or both. Let's add the ability to view shifts to the shift staff. So this is a role I have already created, and now this policy has been added to this role and all users which have it. Now each role or user can have any number of policies attached, and their permissions are an aggregate of all policies. Now this is just a small demo, but I'm sure you can see the power behind the new policies feature for modular, reusable sets of permissions.\u003C/p>\u003Cp>So that isn't all for directives 11. Of course, access policies is the primary new feature, but there is more. One of our highest upvoted feature requests of all time has been to assign multiple roles to a user. And you can now achieve this as roles can contain other roles and all of the characteristics of all of the child roles will be applied to the user. We also now have a new dynamic variable called current roles, which is an array of all of the roles that is held in a user, both the top level and all of the child level roles.\u003C/p>\u003Cp>And finally, a couple of breaking changes to be aware of. Of course, there has been a change to the user roles, permissions, and now policies APIs to account for this new data model. So take a look at our API reference for that, but this is also quite important. If you request non existent fields, you will now get thrown an error. So if you're using the query parameter or you're using a query property using the director's SDK and you ask, for example, for an age field and that does not exist for this user, you will receive a 4 zero three error.\u003C/p>\u003Cp>And another change that's similar is if you are using a many to any field and you're using it via the API, you now have to specify the target collection for fields. You can find details about this in the breaking changes page in the documentation. So that's all about directors 11. Thank you so much, Beth, for giving me the time, and I'll hand back off to you.\u003C/p>\u003Cp>Speaker 0: Excellent. So, next, we're gonna be discussing the Director's Labs experiment, extensions. And for those of you who might not know what Director's Labs is, it's where we publish the extensions I'm about to show you. It's on the Directors Labs org in GitHub. So the first set of extensions we have coined as the media demos, and they allow rich rendering of the file types.\u003C/p>\u003Cp>So we have the video which displays a video from either directors in the local file from directors, which is what you're seeing now, Or we've got Vimeo, and we've also got YouTube. So if I get a YouTube ID to add in here, it shows you immediately the video, within the directors. And if I show you the raw value, you can see that the service and ID are both saved in a JSON object here as well. Very similarly, we have a audio player, which allows you to select an audio source and display an audio player from either a URL or a local file from Directus. Again, like the video interface, you can see the field holds the service and the source.\u003C/p>\u003Cp>Lastly, with the media trio we've got is the PDF viewer, which allows me to see beautiful. A PDF directly within the editor. It's very simple, but it allows if you work with PDF regularly, it's really lovely to see. You can also fit your page to your screen really comfortable. So if you do work a lot with PDFs, this is a nice one for you.\u003C/p>\u003Cp>Next up, we have the video, no. We've got we've got a whiteboard demo. So the whiteboard interface, it supports, free drawing, shapes, text, and uploading images from your, files. And I'll show you here. Beautiful.\u003C/p>\u003Cp>We love it. We've got a lot of for the whiteboard. The extension implements fabric. Js and stores data in a restricted way as you can see. So if you want a whiteboard you can also scroll around with it.\u003C/p>\u003Cp>So, it's a lot of, space for your drawing and text needs. Next up, we have the multilevel demo. So the multilevel API autocomplete interface is probably one of the most powerful, flexible interfaces, that we've released. So it allows for multistep completion where each step can reference the chosen values before it. And we've got 2 demos for you.\u003C/p>\u003Cp>The first, we've got countries. And so this is where we can select the region. And here, we've got Europe and Americas. This is populated from a hard coded list containing just these two items. I'm gonna select Europe, and then you can hopefully see yep.\u003C/p>\u003Cp>Perfect. That once that's completed, the value selected is passed into an external web request to an API that can filter based on selected region. So with the European, we can now see that only European entries are being shown. Although, pick this one. Pick whatever.\u003C/p>\u003Cp>There we go. Although this demo only has 2 steps, you can continue to add more. As you can see within the raw data, each step is stored along with a payload object in a format where we defined, which sorry. Along with the payload object in a format we defined when setting up the interface. So this is what you're seeing.\u003C/p>\u003Cp>The second demo part is part of the multilevel. We're gonna filter based on the data in the director's, project. So we've got an author's collection, which shows that we have the authors Ben and Reich, and we have a post collection with 3 blog posts that are attached to either then or right here. If we go back into posts, we can see that the first autocomplete this time uses, the author generated director's API for this project to return the authors. So we've been alright.\u003C/p>\u003Cp>And then from there, that feeds the result in the second API call to filter and show us the post that are by the selected author. So we've got returning, introducing director Sullivan and what we considered when building a marketplace. Cool. The penultimate one, the many to any interface demo. Very cool.\u003C/p>\u003Cp>So the cool thing about these extensions is that they allow us to experiment and this one is, very much in akin with that. So you can have new UI and UX ideas without needing to roll the changes out to everyone. This is a fairly small experiment. We introduced the UI change to the many set any builder, by adding these big buttons for creating new items. So you can see here, we've got authors, posts, and directors files in create new.\u003C/p>\u003Cp>It's a small idea and one we rolled out but we're not necessarily seeing a future in it. We'd welcome your thoughts though if you do think this is gonna be useful for something else or you are inspired by it, think you're gonna use it, we'd love to hear about that. Moving on to the last of the demos going into flows, we have the rss t JSON operation. So a small extension to pass, RSS feeds into JSON that can be added to the data chain within Directus flows. What it does is takes a URL, in this case, it's a podcast, RSS feed, and returns JSON.\u003C/p>\u003Cp>Okay. So what you're viewing here is the output of the you can but these you can infer steps of your automation. For example, you could extract the m p 3 URL and use our AI transcription extension. Kubers does it, and this is the RSS team at JSON, operation, which we think is pretty cool. So we've got some cloud updates for you.\u003C/p>\u003Cp>Very excitingly, the key update we have is a new starter tier at $15 a month when paid annually. So we've reduced the entry point from $99 a month to our breakeven point for our managed hosted, product. This includes provisioning and hosting a database, asset storage, and caching, all things you need to configure if you were self hosting. So we're hoping you are as excited as that as we are. And we've also got a new self-service that includes single sign on and the introduction of seats for billing.\u003C/p>\u003Cp>And seats are a new billing product. Seat is a user any user who has access to the Data Studio web application that admins and any users in roles that have access enabled. The starter date comes with one seat, and you can add more. There's also a blog post, around if you want to read more about it. And if you've got any questions, we'd also we're here to, help you as well.\u003C/p>\u003Cp>Got some upcoming, content updates for you. So we'll start with docs. So over the last few months, we've put a lot of effort into inviting our friends from other language ecosystems to direct us. We already had a lot of JavaScript framework guides. So we've recently expanded out and published getting started guides for the PHP framework Laravel, hyphen framework Flask to accompany our existing post, Flutter with Dart, and building Android app with Directus and Kotlin.\u003C/p>\u003Cp>So they are all ready for you with getting started guides within the dock. We've also just today released the third of, 3 tutorials on integrating search indexing services with Directus. So you can keep your Elasticsearch, MiniSearch, and Algolia indexes up to date with your Directus project through building custom extensions. And we also have some very cool project tutorials from our community. So I think we've got 3 to showcase.\u003C/p>\u003Cp>This post from Andreas features reverse engineering a baby monitor and hooking up children to a working service, Opsgenie, via direct us. It's very, very funny. It's great to see. It's very helpful. It sounds very funny, I should say.\u003C/p>\u003Cp>It's not very funny. It's actually really useful. We also have Jay showing you how to integrate directors with a Chrome extension, which includes authentication, grabbing page data, and storing it and retrieving it from a director's back end. And lastly, we've got Triste, who wrote a tutorial building an ecommerce store with Next. Js as its front end, director's.\u003C/p>\u003Cp>And then there's also Stripe for payment processing. Lastly, within the content, we've got Directus TV. If you're not familiar, that is our developer focused streaming platform that has dozens of shows focused on education, entertainment, and stories from across the Directus ecosystem. And we've got short hops where Bryant has just released a brand new season, with 8 new quick tips to get the most out of Directus. Season 2 includes an episode on asset transformation presets, focal points, dynamic variables, and complex API queries.\u003C/p>\u003Cp>And that wraps up the announcements. For the rest of the changelog, we've got 3 short segments we think you'll find interesting. The first one is we've got Hannes, one of our engineers, talking through some of the hard technical problems we solved for the new Directus, 11 access control system.\u003C/p>\u003Cp>Speaker 2: I just wanna talk about what hard problems we had to solve as part of the policies rewrite or permissions rewrite of the whole director system. First of all, I wanna start off with saying that I joined the company mid April while the rewrite was already way on the road and happening, since Wrike took the leak on lead on that and started implementing it. I looked back in our notion docs. I saw that we started planning it officially, I think, November last year or something. And then the whole process of implementing it from start of development all the way to the release probably took a couple of months, like, 4 or 5 months since it has been quite a big rewrite of the whole permission system, the underlying permission system, which we're using in the core of directors.\u003C/p>\u003Cp>And touching that and rewriting that and rethinking that presents a challenge since everything relies on it, basically. So whenever we touch all of this, you really need to be sure that we don't break user setups, that we don't introduce any security vulnerabilities, and all of that has to work across 7 different database vendors. Under the hood, we are using the when case statements, so the SQL when case statement. Since we already talked about it a lot, right, we allow different policies for one collection now, and different sets of permissions for those. So what happens if you have a policy that allows access to one field in some cases and a different policy that allows access to some other fields in other cases?\u003C/p>\u003Cp>There's conflict, essentially. So your item structure might vary. For some items, you might be allowed to see a set of fields, and for another item, you're allowed to see a set of other fields. So to manage that and to have the database do the hard work of deciding which fields are, should be visible, we had to resort to using SQL internal mechanisms or SQL, mechanisms, which we're using. We're using when case, which essentially is an if statement within your query, that allows you to, have a set of permissions.\u003C/p>\u003Cp>So basically, similar to what you would do in a where clause, that allows you there was always a case in there. No is a new page, problem with, policies. Kevin just asked, wasn't that always the case that there might be a convergence in fields we allowed to see previously with roles. There was one permission per collection per action. So in the end, this decided if an item was visible.\u003C/p>\u003Cp>And if that policy or that permission didn't match, you didn't see the complete item. And now within your policies, you might see some items and some fields within those items, but not all of the fields. And those sets of what you see can be different now since there's multiple policies applying for the same, applying to the same collection and the same action. So we use when case. When case essentially is a, if statement in your SQL query that, allows us to write stuff like, if the price of this item is larger than $5, show or allow access to the name.\u003C/p>\u003Cp>And the allow access is basically return the name, otherwise, return null. So in your new API output with policies, you might see some fields showing up as null even though they might be non nullable, for example. But that just comes back to the fact that for some items, you might be able to see the name of the item, and so for some, you might not. Using this statement within our core querying engine resulted in a lot of edge cases, a lot of tinkering, a lot of, r and d involving cross vendor support. You know, director supports 7 different different database vendors last time I counted with a lot of different dialects since MySQL isn't always MySQL.\u003C/p>\u003Cp>So in the end, we had to test it cross vendors and figure out what are the constructs we can use since there are is a common set of SQL statements you can use in SQL, like, a common part group of stuff you can use. But they might behave differently in Postgres or SQLite or they might return different things. They might expect different different inputs. So all of that had to be solved in a cross vendor support, which again, because it's very deeply integrated within the core itself, prevented a hard challenge to figure out, like, how do we rewrite the actual court permission engine to take into account the new updated requirements for allowing some fields to be present and some not. I just said it's very deeply integrated.\u003C/p>\u003Cp>So there was a lot of corner cases we had to account for, a lot of, internal APIs we relied on that aren't up to date anymore, that has to be updated, that now expect a completely different inputs, completely new paradigms of looking at permissions because previously, it was fairly straightforward. But now, there is more edge cases to take care of, which has been very interesting to look at. In the end, it resulted in a lot of automated and manual testing to ensure that we don't introduce any regressions, that the API output stays the same, and that we provide a migration that allows users to directly migrate from b 10 to b 11 without any hiccups, hopefully. So we migrate all the existing permissions from roles, stuff them into policies, and figuring that out also was fun. Let's say fun.\u003C/p>\u003Cp>And something we're noticing right now is that we have a very, very large API surface. So, a lot of users of our product expect some undocumented behavior to work the same before v 10 and v 11, which now in the aftermath of having it released to general availability shows that a lot of edge cases we didn't account for, which we have to now after the facts actually look at and solve on a timely basis. And I think that's my 5 minutes to talk about why it was very hard to solve all the new policy and permissions across different vendors.\u003C/p>\u003Cp>Speaker 0: Thank you so much. Moving along to our community showcase section. We have a video very kindly, sent to us by Matthew Ruffino, who is talking about the Mutts uploader.\u003C/p>\u003Cp>Speaker 3: Hi, everybody. My name is Matthew, and I am the current developer for the Mucs upload extension. We're gonna watch a quick little demo. So here we have a brand new page where you can upload directly to Mucs via your direct us back end, that is. This is using the built in Mucs uploader.\u003C/p>\u003Cp>Future plans will have our own custom uploader where we can have it as a custom interface into pre existing collections. Currently, we'll go to our new videos collection and we'll see here that we have a new upload ID, asset ID, and playback ID. When we go into the page, we can see a new interface type that uses the custom mux player for our playback. This right here allows us to quickly upload video, have it transcoded, and be available for view and playback on our back end or in our front end applications. So the motivation for this is client facing like always.\u003C/p>\u003Cp>I had a client that reached out to me that wanted to build a custom video vault. They had years years years of video content that they wanted to upload and they wanted a way to have it nice and digitally organized. And so the first thing that I thought was, let's use the Directus. And so I did. Directus is now powering this video vault.\u003C/p>\u003Cp>But there was just a little bit more that was needed. Right? So the video vault is good for for back end stuff. We can quickly load s 3 and have playback there via mpeg 4. But what if we want to now share this via front end, right, via something like a streaming service?\u003C/p>\u003Cp>This is where Mucs comes into play. You can easily be able to share video via an Amazon S3 bucket, But when you start serving this content for thousands and thousands of people, you'll start to see a lot of slowdown in variation unless you do a whole bunch of configuration. Using mux allows you to easily transcode and get a playback ID immediately to be able to use in your front end application by use of thousands of people and be able to securely know that your video content is safe using DRM. So the approach that I built this was considering some other options that were available. But I've always wanted to use mukes in a project and so I thought that this would be the perfect use case.\u003C/p>\u003Cp>The biggest challenge was really just sitting down and be able to start. Right? We look at documentation all the time and we have ideas, but the hardest part is literally sitting down and just getting started. Once I got started and read through all the documentation and spun up something on Docker, I was off to the races. And it was one of the most easy things that I've ever started to do.\u003C/p>\u003Cp>To be honest, when it comes to development for different services, back ends, and and things like that, right? Directus just made it very easy out of the gate to be able to start developing this extension. So as I'm developing this, I have a lot of ideas planned for version 1. So the extra things planned would be something like live streaming. Being able to quickly create a live stream in our back end and receive the keys needed for programs like OBS or vMix, or to be able to tie that into a front end and to allow users or other people in the front end application that we're building to receive their own live streaming keys and then to live stream.\u003C/p>\u003Cp>Other options and other planned features would be things like watermarking, closed captioning, and secure stream options. So with each video that you upload, you'll be able to include custom watermarks, closed captioning files like SRTs to have them built in, and to be able to secure each video the way that you want to tied to user roles. I'm actually also planning to build the same thing for BunnyStream by BunnyCDN. BunnyCDN is a great choice for storage and CDN services, and they have been expanding their technology over the years. BunnyCDN offers something very similar to Mucs where you can upload content, video content, audio content, and to be able to receive streaming links right in return.\u003C/p>\u003Cp>Same thing with closed captioning, DRM, and more. So once the Mucs upload extension is completed, I'm gonna set my sights on BunnyCDN to be able to use BunnyStream built into Directus. I'm always looking for help. Always looking for help. I have so many clients, I have 3 little girls, and my hands are always tied.\u003C/p>\u003Cp>If you like this idea and you think that you could benefit from it, the source code is available in GitHub right now. I'm always looking for contributors to help me build the best things that I can. And if you wanna be a part of that, that would be amazing. Please find me as Mateo on the Directus Discord and we can talk more. Or go ahead and make a PR and we can start there too.\u003C/p>\u003Cp>Now the best for last, Mukes is actually planning on featuring this extension on their website once it's completed. I had preliminary talks with them this year saying, hey, you guys support all these other platforms but why not Directus? And so I showed them what I what I was working on and I shared videos and code base with them and they're very excited. While they can't say or take the code and run with it, they are gonna do a highlight series kind of similar to this where they'll be able to talk about me, Directus, and how everything works together with mukes. And it's not only gonna be beneficial for mukes, it's gonna be amazing for Directus to have that kind of of, you know, happiness and feedback from a completely different team.\u003C/p>\u003Cp>I'm very excited and I hope that you guys are just as excited as I am. Again, my name is Matthew and I'm the sole developer here currently for the Mucs uploader looking for contributors. You guys have a great rest of your day. Bye.\u003C/p>\u003Cp>Speaker 0: Thank you so much, Rousseau. I very much all of you legend in the Director's, Discord. We now have a developing tutorial. And for this month, Kevin is going through using Directvist UI library and extensions.\u003C/p>\u003Cp>Speaker 1: For the very first change log, we've decided to, as we get towards the end, pop a little developer tutorial in here for one of the questions we're seeing come up an increasing amount. And that is for new extension authors who are wondering how to make their extensions feel consistent with the rest of the director's data studio, by using some of the premade components that exist in the rest of the application. So here I spun up a new directors project locally. Take note that extensions auto reload is set to true. And we are mounting in an extensions volume, which is this directory here in the sidebar.\u003C/p>\u003Cp>And then we're going to go into the extensions, one moment, we're gonna go into the extensions directory, and run MPX create extension at latest. You can pick an extension type. We're going to pick a panel. I'll just call it test very inspired, and leave all of the other options as default. So now we have this test directory here, which contains our entry point file, this index dotjs, which contains all the configuration for the panel, and the view component itself, and this is where we'll be doing our work.\u003C/p>\u003Cp>So we're gonna CD into this directory, and run NPM run dev. And what that's going to do is watch for changes inside of this directory source folder. And whenever there is a change made, it will rebuild it into this dist folder. And this is what will actually load in. So I'm just gonna just first time just restart the, container, restart the the Docker container for the first time, and then it should auto reload when we make changes.\u003C/p>\u003Cp>And if I refresh this empty, dashboard here, we should now see there is our custom panel right there. There is the test, sorry, text option, which is this one. So I might say, hello, and hit save. And we see that that's rendered into the panel here. It's passed in as a prop, and we can use it straight within here.\u003C/p>\u003Cp>So that's fantastic. We've got this panel. But now we wanna actually start to include, these UI components that exist. Now we actually ship what we call a component playground. This is a components dot directors.io.\u003C/p>\u003Cp>We're still adding a few last components here. So this isn't an exhaustive list, but it is many of them. And this contains everything from a directors feeling checkbox, we can see here that looks like what exists in the data studio. A input complete with, you know, the focus and the active states, stuff like that. Pagination and so on and so forth.\u003C/p>\u003Cp>And you can use any of these by taking code that is generated by this component playground. So we have this fancy select, for example, here. Right. Ultimately, just to select, kinda cool. And what's nice is we get this little controls area on the right hand side where we can make changes.\u003C/p>\u003Cp>So let's find one. This is probably not a fantastic example of the customizability. Maybe we look at the input for a quick example here. We see that there are quite a few options. Is it disabled?\u003C/p>\u003Cp>And you see immediately it gets grayed out with all of the, behavior and the styling that you would expect. Are we gonna it? So whenever you type, you know, you put a space, it replaces it with a dash and so on, only lower case and so on. The slug separator, you know, you could make it an underscore. And there's just all of these options that we have here.\u003C/p>\u003Cp>And you'll notice that as I'm checking them here or changing the values, the prefix could be, I don't know, a smiley face or maybe HTTPS, something like that. We see that it's changing in the UI here in this little, this little example, but it's also changing it down here. And the best thing about this is all of these components are made globally available inside of the data studio, including for extension. So I can literally copy this v input here, copy it. I can paste it directly in.\u003C/p>\u003Cp>Now this one has a v model, so just because it's, just because it's view, I will just quickly make sure that it has a value it can re it can write into value quote. Great. And that's it. Like, that is us using the v input. The extensions auto reloaded.\u003C/p>\u003Cp>So if I go back here and refresh, there we are. There's our UI component. And this is a panel, but you can use this across any of the app extension types, any of any of the components that are listed in that components playground there. So that's a little example of how you can use the work that we have already done in order to build consistent, and in my opinion, quite nice looking, extensions that feel like they belong inside of the Data Studio. So, again, thank you for giving me the time to show you this, and I'll hand back over to Beth.\u003C/p>\u003Cp>Speaker 0: So wrapping this up, we want to take this moment towards the end of the changelog to thank our amazing community contributors who do a lot and give their time to improve the Derivatives project and for whom we are very very grateful. So since the last time we did this where we thanked contributors, we've had multiple releases and multiple contributors so there is quite a bit of a list. I am going to thank them individually. So, thank you to the following people. Parker for adding support for ad admin token environment variable, which will be great for testing and initial project bootstrapping.\u003C/p>\u003Cp>Josh for fixing an issue causing the TUS uploads not to respect the relative path of the app. Joel for prioritising access token in a query over cookies for web sockets authentication. Dominic for optimizing the type signature of the item service collection parameter. Yep. Gerald for enabling caching of field information and foreign keys as part of schema caching.\u003C/p>\u003Cp>Florian for increasing visibility of the data model expand slash collapse buttons. Junhong for ensuring the drop down interface correctly works when there are no options. Adding auto reset of a drop down face value after conditional update of options, fixing the versioning drop down to with long version names, fixing detail groups collapsing on save and stay, fixing the calendar layout crashing with invalid dates, removing the update delay in the block editor interface, and lastly, fixing the list structure in draggable list. Thanks also to Max for fixing filename disk extension not getting updated when replacing a file with another file extension. Andre for ensuring the assets transform image max dimension value is also respected for extraction of metadata during image upload.\u003C/p>\u003Cp>Johan for adding a retry mechanism for SQLite if a SQLite busy error occurs. Florian for adding support for listening on UNIX WebSocket, UNIX sockets via a new UNIX socket path variable, Danilo Burger for fixing an issue that would cause the translation display not to use the correct language if the user relied on system language, and finally, clicker for fixing a warning when using Docker with MySQL slash Maria DB. So that was a long list, and we are so grateful for every single one of you. Thank you again. And if you're listening to this and you want to see the specific pull requests, you can find them inside of the full release notes on GitHub.\u003C/p>\u003Cp>That concludes I'm just going to see and pause if there are any questions that we've done with. There's not. That concludes the first, change log. And as we said at the beginning, but just to reiterate, we are so welcoming of feedback of anything you might like to see, what you like to see more of, maybe what you like to see less of if it's constructive. We are hoping to be really flexible with the different segments we show you so some things will stay consistent I.\u003C/p>\u003Cp>E. What's new and the updates but we'll be bringing different things. We've got a lot of good ideas and we definitely want to be here yours as well. But that's everything so thank you so much for joining us and taking the time. We really appreciate it.\u003C/p>\u003Cp>We hope that you found this interesting and we'll be back again so keep an eye out on the events section and hopefully we'll see you next time. But if nothing else we'll be around here for a couple minutes in case there's any last questions But if not, thanks everyone and have a very great rest of your day.\u003C/p>","Welcome to the changelog everyone. This is the first of, regular recurring monthly event that we're hoping to do, showing you what is next, new with Directus. So hi. I'm Beth. I am in the developer experience team here with Directus. We would really like to hear your feedback on this event and what we've got in it and what you'd like to see from us in the future. So with that being said, the first set of is with Kevin. We are going to kick off the changelog with what is probably the most significant announcement for today, and that is the full release of 11. Following on from the release candidate, which we announced in June at our last leap week. And the headline feature of directors 11 is our brand new permission system, which is now based on policies. This is a big shift in how directors handles access control, giving you more power and flexibility by creating reusable sets of permissions. Now of course I can just sit here and talk to you about it, but I've prepared a little demo because I think that's gonna be a little bit better. So let's go over to my screen and I'll show you around. In this demo of directors 11, we are managing a restaurant. And there are 4 collections, staff, shifts, bookings, and sales. And here in the settings, we have this new access policies section, which allows you to manage the new access policies feature. Now I've created a number of policies, each with their own set of permissions. If we look at bookings manage, we see that this policy allows for full, permissions in the bookings collection. And I've also created others to allow users just to add new sales or perhaps to manage sales providing full CRUD access. If we head over to this shifts view policy, we see that there are a number of permissions across multiple collections. Here, there is full read permissions over the shifts collection and partial read access over the staff collection. And specifically here, we're only allowing users with this policy to see the names of staff and no other information. Now policies can be attached to either users or roles or both. Let's add the ability to view shifts to the shift staff. So this is a role I have already created, and now this policy has been added to this role and all users which have it. Now each role or user can have any number of policies attached, and their permissions are an aggregate of all policies. Now this is just a small demo, but I'm sure you can see the power behind the new policies feature for modular, reusable sets of permissions. So that isn't all for directives 11. Of course, access policies is the primary new feature, but there is more. One of our highest upvoted feature requests of all time has been to assign multiple roles to a user. And you can now achieve this as roles can contain other roles and all of the characteristics of all of the child roles will be applied to the user. We also now have a new dynamic variable called current roles, which is an array of all of the roles that is held in a user, both the top level and all of the child level roles. And finally, a couple of breaking changes to be aware of. Of course, there has been a change to the user roles, permissions, and now policies APIs to account for this new data model. So take a look at our API reference for that, but this is also quite important. If you request non existent fields, you will now get thrown an error. So if you're using the query parameter or you're using a query property using the director's SDK and you ask, for example, for an age field and that does not exist for this user, you will receive a 4 zero three error. And another change that's similar is if you are using a many to any field and you're using it via the API, you now have to specify the target collection for fields. You can find details about this in the breaking changes page in the documentation. So that's all about directors 11. Thank you so much, Beth, for giving me the time, and I'll hand back off to you. Excellent. So, next, we're gonna be discussing the Director's Labs experiment, extensions. And for those of you who might not know what Director's Labs is, it's where we publish the extensions I'm about to show you. It's on the Directors Labs org in GitHub. So the first set of extensions we have coined as the media demos, and they allow rich rendering of the file types. So we have the video which displays a video from either directors in the local file from directors, which is what you're seeing now, Or we've got Vimeo, and we've also got YouTube. So if I get a YouTube ID to add in here, it shows you immediately the video, within the directors. And if I show you the raw value, you can see that the service and ID are both saved in a JSON object here as well. Very similarly, we have a audio player, which allows you to select an audio source and display an audio player from either a URL or a local file from Directus. Again, like the video interface, you can see the field holds the service and the source. Lastly, with the media trio we've got is the PDF viewer, which allows me to see beautiful. A PDF directly within the editor. It's very simple, but it allows if you work with PDF regularly, it's really lovely to see. You can also fit your page to your screen really comfortable. So if you do work a lot with PDFs, this is a nice one for you. Next up, we have the video, no. We've got we've got a whiteboard demo. So the whiteboard interface, it supports, free drawing, shapes, text, and uploading images from your, files. And I'll show you here. Beautiful. We love it. We've got a lot of for the whiteboard. The extension implements fabric. Js and stores data in a restricted way as you can see. So if you want a whiteboard you can also scroll around with it. So, it's a lot of, space for your drawing and text needs. Next up, we have the multilevel demo. So the multilevel API autocomplete interface is probably one of the most powerful, flexible interfaces, that we've released. So it allows for multistep completion where each step can reference the chosen values before it. And we've got 2 demos for you. The first, we've got countries. And so this is where we can select the region. And here, we've got Europe and Americas. This is populated from a hard coded list containing just these two items. I'm gonna select Europe, and then you can hopefully see yep. Perfect. That once that's completed, the value selected is passed into an external web request to an API that can filter based on selected region. So with the European, we can now see that only European entries are being shown. Although, pick this one. Pick whatever. There we go. Although this demo only has 2 steps, you can continue to add more. As you can see within the raw data, each step is stored along with a payload object in a format where we defined, which sorry. Along with the payload object in a format we defined when setting up the interface. So this is what you're seeing. The second demo part is part of the multilevel. We're gonna filter based on the data in the director's, project. So we've got an author's collection, which shows that we have the authors Ben and Reich, and we have a post collection with 3 blog posts that are attached to either then or right here. If we go back into posts, we can see that the first autocomplete this time uses, the author generated director's API for this project to return the authors. So we've been alright. And then from there, that feeds the result in the second API call to filter and show us the post that are by the selected author. So we've got returning, introducing director Sullivan and what we considered when building a marketplace. Cool. The penultimate one, the many to any interface demo. Very cool. So the cool thing about these extensions is that they allow us to experiment and this one is, very much in akin with that. So you can have new UI and UX ideas without needing to roll the changes out to everyone. This is a fairly small experiment. We introduced the UI change to the many set any builder, by adding these big buttons for creating new items. So you can see here, we've got authors, posts, and directors files in create new. It's a small idea and one we rolled out but we're not necessarily seeing a future in it. We'd welcome your thoughts though if you do think this is gonna be useful for something else or you are inspired by it, think you're gonna use it, we'd love to hear about that. Moving on to the last of the demos going into flows, we have the rss t JSON operation. So a small extension to pass, RSS feeds into JSON that can be added to the data chain within Directus flows. What it does is takes a URL, in this case, it's a podcast, RSS feed, and returns JSON. Okay. So what you're viewing here is the output of the you can but these you can infer steps of your automation. For example, you could extract the m p 3 URL and use our AI transcription extension. Kubers does it, and this is the RSS team at JSON, operation, which we think is pretty cool. So we've got some cloud updates for you. Very excitingly, the key update we have is a new starter tier at $15 a month when paid annually. So we've reduced the entry point from $99 a month to our breakeven point for our managed hosted, product. This includes provisioning and hosting a database, asset storage, and caching, all things you need to configure if you were self hosting. So we're hoping you are as excited as that as we are. And we've also got a new self-service that includes single sign on and the introduction of seats for billing. And seats are a new billing product. Seat is a user any user who has access to the Data Studio web application that admins and any users in roles that have access enabled. The starter date comes with one seat, and you can add more. There's also a blog post, around if you want to read more about it. And if you've got any questions, we'd also we're here to, help you as well. Got some upcoming, content updates for you. So we'll start with docs. So over the last few months, we've put a lot of effort into inviting our friends from other language ecosystems to direct us. We already had a lot of JavaScript framework guides. So we've recently expanded out and published getting started guides for the PHP framework Laravel, hyphen framework Flask to accompany our existing post, Flutter with Dart, and building Android app with Directus and Kotlin. So they are all ready for you with getting started guides within the dock. We've also just today released the third of, 3 tutorials on integrating search indexing services with Directus. So you can keep your Elasticsearch, MiniSearch, and Algolia indexes up to date with your Directus project through building custom extensions. And we also have some very cool project tutorials from our community. So I think we've got 3 to showcase. This post from Andreas features reverse engineering a baby monitor and hooking up children to a working service, Opsgenie, via direct us. It's very, very funny. It's great to see. It's very helpful. It sounds very funny, I should say. It's not very funny. It's actually really useful. We also have Jay showing you how to integrate directors with a Chrome extension, which includes authentication, grabbing page data, and storing it and retrieving it from a director's back end. And lastly, we've got Triste, who wrote a tutorial building an ecommerce store with Next. Js as its front end, director's. And then there's also Stripe for payment processing. Lastly, within the content, we've got Directus TV. If you're not familiar, that is our developer focused streaming platform that has dozens of shows focused on education, entertainment, and stories from across the Directus ecosystem. And we've got short hops where Bryant has just released a brand new season, with 8 new quick tips to get the most out of Directus. Season 2 includes an episode on asset transformation presets, focal points, dynamic variables, and complex API queries. And that wraps up the announcements. For the rest of the changelog, we've got 3 short segments we think you'll find interesting. The first one is we've got Hannes, one of our engineers, talking through some of the hard technical problems we solved for the new Directus, 11 access control system. I just wanna talk about what hard problems we had to solve as part of the policies rewrite or permissions rewrite of the whole director system. First of all, I wanna start off with saying that I joined the company mid April while the rewrite was already way on the road and happening, since Wrike took the leak on lead on that and started implementing it. I looked back in our notion docs. I saw that we started planning it officially, I think, November last year or something. And then the whole process of implementing it from start of development all the way to the release probably took a couple of months, like, 4 or 5 months since it has been quite a big rewrite of the whole permission system, the underlying permission system, which we're using in the core of directors. And touching that and rewriting that and rethinking that presents a challenge since everything relies on it, basically. So whenever we touch all of this, you really need to be sure that we don't break user setups, that we don't introduce any security vulnerabilities, and all of that has to work across 7 different database vendors. Under the hood, we are using the when case statements, so the SQL when case statement. Since we already talked about it a lot, right, we allow different policies for one collection now, and different sets of permissions for those. So what happens if you have a policy that allows access to one field in some cases and a different policy that allows access to some other fields in other cases? There's conflict, essentially. So your item structure might vary. For some items, you might be allowed to see a set of fields, and for another item, you're allowed to see a set of other fields. So to manage that and to have the database do the hard work of deciding which fields are, should be visible, we had to resort to using SQL internal mechanisms or SQL, mechanisms, which we're using. We're using when case, which essentially is an if statement within your query, that allows you to, have a set of permissions. So basically, similar to what you would do in a where clause, that allows you there was always a case in there. No is a new page, problem with, policies. Kevin just asked, wasn't that always the case that there might be a convergence in fields we allowed to see previously with roles. There was one permission per collection per action. So in the end, this decided if an item was visible. And if that policy or that permission didn't match, you didn't see the complete item. And now within your policies, you might see some items and some fields within those items, but not all of the fields. And those sets of what you see can be different now since there's multiple policies applying for the same, applying to the same collection and the same action. So we use when case. When case essentially is a, if statement in your SQL query that, allows us to write stuff like, if the price of this item is larger than $5, show or allow access to the name. And the allow access is basically return the name, otherwise, return null. So in your new API output with policies, you might see some fields showing up as null even though they might be non nullable, for example. But that just comes back to the fact that for some items, you might be able to see the name of the item, and so for some, you might not. Using this statement within our core querying engine resulted in a lot of edge cases, a lot of tinkering, a lot of, r and d involving cross vendor support. You know, director supports 7 different different database vendors last time I counted with a lot of different dialects since MySQL isn't always MySQL. So in the end, we had to test it cross vendors and figure out what are the constructs we can use since there are is a common set of SQL statements you can use in SQL, like, a common part group of stuff you can use. But they might behave differently in Postgres or SQLite or they might return different things. They might expect different different inputs. So all of that had to be solved in a cross vendor support, which again, because it's very deeply integrated within the core itself, prevented a hard challenge to figure out, like, how do we rewrite the actual court permission engine to take into account the new updated requirements for allowing some fields to be present and some not. I just said it's very deeply integrated. So there was a lot of corner cases we had to account for, a lot of, internal APIs we relied on that aren't up to date anymore, that has to be updated, that now expect a completely different inputs, completely new paradigms of looking at permissions because previously, it was fairly straightforward. But now, there is more edge cases to take care of, which has been very interesting to look at. In the end, it resulted in a lot of automated and manual testing to ensure that we don't introduce any regressions, that the API output stays the same, and that we provide a migration that allows users to directly migrate from b 10 to b 11 without any hiccups, hopefully. So we migrate all the existing permissions from roles, stuff them into policies, and figuring that out also was fun. Let's say fun. And something we're noticing right now is that we have a very, very large API surface. So, a lot of users of our product expect some undocumented behavior to work the same before v 10 and v 11, which now in the aftermath of having it released to general availability shows that a lot of edge cases we didn't account for, which we have to now after the facts actually look at and solve on a timely basis. And I think that's my 5 minutes to talk about why it was very hard to solve all the new policy and permissions across different vendors. Thank you so much. Moving along to our community showcase section. We have a video very kindly, sent to us by Matthew Ruffino, who is talking about the Mutts uploader. Hi, everybody. My name is Matthew, and I am the current developer for the Mucs upload extension. We're gonna watch a quick little demo. So here we have a brand new page where you can upload directly to Mucs via your direct us back end, that is. This is using the built in Mucs uploader. Future plans will have our own custom uploader where we can have it as a custom interface into pre existing collections. Currently, we'll go to our new videos collection and we'll see here that we have a new upload ID, asset ID, and playback ID. When we go into the page, we can see a new interface type that uses the custom mux player for our playback. This right here allows us to quickly upload video, have it transcoded, and be available for view and playback on our back end or in our front end applications. So the motivation for this is client facing like always. I had a client that reached out to me that wanted to build a custom video vault. They had years years years of video content that they wanted to upload and they wanted a way to have it nice and digitally organized. And so the first thing that I thought was, let's use the Directus. And so I did. Directus is now powering this video vault. But there was just a little bit more that was needed. Right? So the video vault is good for for back end stuff. We can quickly load s 3 and have playback there via mpeg 4. But what if we want to now share this via front end, right, via something like a streaming service? This is where Mucs comes into play. You can easily be able to share video via an Amazon S3 bucket, But when you start serving this content for thousands and thousands of people, you'll start to see a lot of slowdown in variation unless you do a whole bunch of configuration. Using mux allows you to easily transcode and get a playback ID immediately to be able to use in your front end application by use of thousands of people and be able to securely know that your video content is safe using DRM. So the approach that I built this was considering some other options that were available. But I've always wanted to use mukes in a project and so I thought that this would be the perfect use case. The biggest challenge was really just sitting down and be able to start. Right? We look at documentation all the time and we have ideas, but the hardest part is literally sitting down and just getting started. Once I got started and read through all the documentation and spun up something on Docker, I was off to the races. And it was one of the most easy things that I've ever started to do. To be honest, when it comes to development for different services, back ends, and and things like that, right? Directus just made it very easy out of the gate to be able to start developing this extension. So as I'm developing this, I have a lot of ideas planned for version 1. So the extra things planned would be something like live streaming. Being able to quickly create a live stream in our back end and receive the keys needed for programs like OBS or vMix, or to be able to tie that into a front end and to allow users or other people in the front end application that we're building to receive their own live streaming keys and then to live stream. Other options and other planned features would be things like watermarking, closed captioning, and secure stream options. So with each video that you upload, you'll be able to include custom watermarks, closed captioning files like SRTs to have them built in, and to be able to secure each video the way that you want to tied to user roles. I'm actually also planning to build the same thing for BunnyStream by BunnyCDN. BunnyCDN is a great choice for storage and CDN services, and they have been expanding their technology over the years. BunnyCDN offers something very similar to Mucs where you can upload content, video content, audio content, and to be able to receive streaming links right in return. Same thing with closed captioning, DRM, and more. So once the Mucs upload extension is completed, I'm gonna set my sights on BunnyCDN to be able to use BunnyStream built into Directus. I'm always looking for help. Always looking for help. I have so many clients, I have 3 little girls, and my hands are always tied. If you like this idea and you think that you could benefit from it, the source code is available in GitHub right now. I'm always looking for contributors to help me build the best things that I can. And if you wanna be a part of that, that would be amazing. Please find me as Mateo on the Directus Discord and we can talk more. Or go ahead and make a PR and we can start there too. Now the best for last, Mukes is actually planning on featuring this extension on their website once it's completed. I had preliminary talks with them this year saying, hey, you guys support all these other platforms but why not Directus? And so I showed them what I what I was working on and I shared videos and code base with them and they're very excited. While they can't say or take the code and run with it, they are gonna do a highlight series kind of similar to this where they'll be able to talk about me, Directus, and how everything works together with mukes. And it's not only gonna be beneficial for mukes, it's gonna be amazing for Directus to have that kind of of, you know, happiness and feedback from a completely different team. I'm very excited and I hope that you guys are just as excited as I am. Again, my name is Matthew and I'm the sole developer here currently for the Mucs uploader looking for contributors. You guys have a great rest of your day. Bye. Thank you so much, Rousseau. I very much all of you legend in the Director's, Discord. We now have a developing tutorial. And for this month, Kevin is going through using Directvist UI library and extensions. For the very first change log, we've decided to, as we get towards the end, pop a little developer tutorial in here for one of the questions we're seeing come up an increasing amount. And that is for new extension authors who are wondering how to make their extensions feel consistent with the rest of the director's data studio, by using some of the premade components that exist in the rest of the application. So here I spun up a new directors project locally. Take note that extensions auto reload is set to true. And we are mounting in an extensions volume, which is this directory here in the sidebar. And then we're going to go into the extensions, one moment, we're gonna go into the extensions directory, and run MPX create extension at latest. You can pick an extension type. We're going to pick a panel. I'll just call it test very inspired, and leave all of the other options as default. So now we have this test directory here, which contains our entry point file, this index dotjs, which contains all the configuration for the panel, and the view component itself, and this is where we'll be doing our work. So we're gonna CD into this directory, and run NPM run dev. And what that's going to do is watch for changes inside of this directory source folder. And whenever there is a change made, it will rebuild it into this dist folder. And this is what will actually load in. So I'm just gonna just first time just restart the, container, restart the the Docker container for the first time, and then it should auto reload when we make changes. And if I refresh this empty, dashboard here, we should now see there is our custom panel right there. There is the test, sorry, text option, which is this one. So I might say, hello, and hit save. And we see that that's rendered into the panel here. It's passed in as a prop, and we can use it straight within here. So that's fantastic. We've got this panel. But now we wanna actually start to include, these UI components that exist. Now we actually ship what we call a component playground. This is a components dot directors.io. We're still adding a few last components here. So this isn't an exhaustive list, but it is many of them. And this contains everything from a directors feeling checkbox, we can see here that looks like what exists in the data studio. A input complete with, you know, the focus and the active states, stuff like that. Pagination and so on and so forth. And you can use any of these by taking code that is generated by this component playground. So we have this fancy select, for example, here. Right. Ultimately, just to select, kinda cool. And what's nice is we get this little controls area on the right hand side where we can make changes. So let's find one. This is probably not a fantastic example of the customizability. Maybe we look at the input for a quick example here. We see that there are quite a few options. Is it disabled? And you see immediately it gets grayed out with all of the, behavior and the styling that you would expect. Are we gonna it? So whenever you type, you know, you put a space, it replaces it with a dash and so on, only lower case and so on. The slug separator, you know, you could make it an underscore. And there's just all of these options that we have here. And you'll notice that as I'm checking them here or changing the values, the prefix could be, I don't know, a smiley face or maybe HTTPS, something like that. We see that it's changing in the UI here in this little, this little example, but it's also changing it down here. And the best thing about this is all of these components are made globally available inside of the data studio, including for extension. So I can literally copy this v input here, copy it. I can paste it directly in. Now this one has a v model, so just because it's, just because it's view, I will just quickly make sure that it has a value it can re it can write into value quote. Great. And that's it. Like, that is us using the v input. The extensions auto reloaded. So if I go back here and refresh, there we are. There's our UI component. And this is a panel, but you can use this across any of the app extension types, any of any of the components that are listed in that components playground there. So that's a little example of how you can use the work that we have already done in order to build consistent, and in my opinion, quite nice looking, extensions that feel like they belong inside of the Data Studio. So, again, thank you for giving me the time to show you this, and I'll hand back over to Beth. So wrapping this up, we want to take this moment towards the end of the changelog to thank our amazing community contributors who do a lot and give their time to improve the Derivatives project and for whom we are very very grateful. So since the last time we did this where we thanked contributors, we've had multiple releases and multiple contributors so there is quite a bit of a list. I am going to thank them individually. So, thank you to the following people. Parker for adding support for ad admin token environment variable, which will be great for testing and initial project bootstrapping. Josh for fixing an issue causing the TUS uploads not to respect the relative path of the app. Joel for prioritising access token in a query over cookies for web sockets authentication. Dominic for optimizing the type signature of the item service collection parameter. Yep. Gerald for enabling caching of field information and foreign keys as part of schema caching. Florian for increasing visibility of the data model expand slash collapse buttons. Junhong for ensuring the drop down interface correctly works when there are no options. Adding auto reset of a drop down face value after conditional update of options, fixing the versioning drop down to with long version names, fixing detail groups collapsing on save and stay, fixing the calendar layout crashing with invalid dates, removing the update delay in the block editor interface, and lastly, fixing the list structure in draggable list. Thanks also to Max for fixing filename disk extension not getting updated when replacing a file with another file extension. Andre for ensuring the assets transform image max dimension value is also respected for extraction of metadata during image upload. Johan for adding a retry mechanism for SQLite if a SQLite busy error occurs. Florian for adding support for listening on UNIX WebSocket, UNIX sockets via a new UNIX socket path variable, Danilo Burger for fixing an issue that would cause the translation display not to use the correct language if the user relied on system language, and finally, clicker for fixing a warning when using Docker with MySQL slash Maria DB. So that was a long list, and we are so grateful for every single one of you. Thank you again. And if you're listening to this and you want to see the specific pull requests, you can find them inside of the full release notes on GitHub. That concludes I'm just going to see and pause if there are any questions that we've done with. There's not. That concludes the first, change log. And as we said at the beginning, but just to reiterate, we are so welcoming of feedback of anything you might like to see, what you like to see more of, maybe what you like to see less of if it's constructive. We are hoping to be really flexible with the different segments we show you so some things will stay consistent I. E. What's new and the updates but we'll be bringing different things. We've got a lot of good ideas and we definitely want to be here yours as well. But that's everything so thank you so much for joining us and taking the time. We really appreciate it. We hope that you found this interesting and we'll be back again so keep an eye out on the events section and hopefully we'll see you next time. But if nothing else we'll be around here for a couple minutes in case there's any last questions But if not, thanks everyone and have a very great rest of your day.","503c4ebe-b99b-4706-9418-eb6409863fed",[174,175,176],"be894782-2277-4ab0-904b-b872d7460fd8","55bcda6a-85ef-46e2-9f9d-11cfa049f5a0","eed47369-d68d-49a8-ac36-ea260db0eab4",[],{"id":152,"number":153,"show":122,"year":154,"episodes":179},[156,157,158,159,160],{"id":157,"slug":181,"vimeo_id":182,"description":183,"tile":184,"length":185,"resources":8,"people":8,"episode_number":140,"published":186,"title":187,"video_transcript_html":188,"video_transcript_text":189,"content":8,"seo":190,"status":130,"episode_people":191,"recommendations":195,"season":196},"2-september-2024","1008099269","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes a community showcase from websyte.ai, Rijk taking us through what's in his dock and Kevin with a tutorial on complex media transformations.","fb790812-6a22-49ff-b39a-cb8c0bc7818c",37,"2024-09-11","September 2024","\u003Cp>Speaker 0: Welcome to the second version of the change log. If you didn't catch the last one, which was our very first one, welcome. Nice to have you here. The change log is where we go through what is new with directors this last month, and then we've also got some fun segments as well, so you're in for a treat, stick around. But the very first one is going to be Kevin taking it away with what is new with product, so hopefully you can hear this as well.\u003C/p>\u003Cp>Speaker 1: Last week, we released Directus 11.1, and with it, a major new feature, which is useful for every Directus project but really impactful for users of Directus Cloud, where Directus runs on our infrastructure, and that feature is log streaming. Let me show you how it works. Okay. So here we have a system logs, kind of session already begun over here. And this is ultimately a debugging tool to help you understand what requests are being made in your Director's project.\u003C/p>\u003Cp>So as I click around, you will see here that logs are being shown over on the left hand side. And that, of course, also includes errors, that may be happening, so you can have a little bit more of an idea of how that's happening. You can click into any given request and get a little bit more information about it. And you can filter all of the logs here, by log level. By default they're all enabled.\u003C/p>\u003Cp>And if you're running a Node Directus instance, you can also specify which, which nodes or instances you want to see logs for. You can access this straight from your project settings here from Directus version 11.1.0, and you can change the logging style by changing the log style environment variable. Now, like always, we are open to feedback, so we'd love to see, your feedback about this feature, but hope you find it useful. In the last month, there have also been a couple of smaller releases of Directus before 11.1, and these included some notable new features. Firstly, we added support for listening on Unix sockets instead of a host and port, which allows for inter process communication.\u003C/p>\u003Cp>This was a community contribution, so thank you very much for that. You can now also use an environment variable to configure how long invites last before they expire. This is really helpful if you have to create invites, but they were tending to expire before being used. And finally, we have also added support for indices via a new is indexed field, which means you don't have to do this directly in your database anymore, but can instead use Directus. So that's what's new across Directus version 11.0.2, 11.0.3, and Directus 11.1.0.\u003C/p>\u003Cp>They're available now on Docker Hub and on Directus Cloud, and we can't wait for you to use them. Alright. Thank you so much for this time, Beth. I'm gonna hand back over to you.\u003C/p>\u003Cp>Speaker 2: I'm gonna take you through what's new with Directors Labs. And as a quick reminder, Directors Labs is our experimental extension location where we regularly release new extensions we think are cool, and we hope you agree. So if I open up our demo for you and check that it's her. Yes. It is.\u003C/p>\u003Cp>Within flows, the first two to talk about are both email focused. Firstly, the liquid JS template operation, which enables dynamically generated content creation, such as personalized emails or really any scenario where you need to combine data with templates within a flow. Templates can be configured in the flow as a custom template or sourced from a collection. You can dynamically create different outputs based on multiple items. Here, the data is an array of users.\u003C/p>\u003Cp>You can use the liquid templating language, including loops and conditionals, injecting custom data in the data chain using these slightly altered liquid delimiters. If I go into the logs\u003C/p>\u003Cp>Speaker 0: here,\u003C/p>\u003Cp>Speaker 2: here is the output of the operation as well.\u003C/p>\u003Cp>Speaker 0: That is the first,\u003C/p>\u003Cp>Speaker 2: that runs into our second to talk about which is the resend email operation which integrates resend's email API into your director's flow. So here you, we are preparing the emails to send via resend, It's using the templates returned from the previous operation as the HTML property. And if we go into the resend operation itself, the operation supports most of resend's, endpoints along with the various options that we pass in the array from the previous operation. So there are 2 email focused operations. We go into insights for the panel demo, which are our next 3 to talk about.\u003C/p>\u003Cp>They look good. This one is the table in insight panel, which facilitates data from across multiple tables. And if you click an item, it'll open the director's editor drawer, but you can see here under socks. The next is the plausible analytics panel. This is part of a bundle and embeds your plausible analytics right within your director's project.\u003C/p>\u003Cp>I believe we're using the plausible sample data for this, which are the graphs that you're seeing. And lastly, another part of a bundle panel is the flow trigger panel that allows you to run manually trigger flows from right within a dashboard. If we go into content, you can also see the matching interfaces as part of the plausible analytics bundle and the flow trigger bundle. So you can trigger a flow or show a page level analytics dashboard as an interface as part of those as well. Next, we have the list interface, a small UI and UX, experiment for tags.\u003C/p>\u003Cp>So you can't reorder tags. You need to remove and re add them in order. This interface is a mix of tags and a repeater, and you can easily add and reorder strings. There's also full keyboard support with that as well. Lastly, I am gonna move location to show you.\u003C/p>\u003Cp>Here. Perfect. This is a global command palette now available along with a global search. So this module enables a command k shortcut that lets you navigate to collections, like so. Team.\u003C/p>\u003Cp>Not he, team. What else can I show you here? So, we can also search collections. So if we say search resources, like so, and I'd be looking for a spreadsheet, like so. And in the moment, if I wanted to create a new item, I could do that by create a to z partners.\u003C/p>\u003Cp>And, for example, this also allows run context aware actions like copying the API URL or running flows. It's gonna be a really nice tool for power users to navigate the data studio more quickly. I know I said lastly, but I have got a bonus for you. This isn't an extension, but it is for extension authors. We do often get asked how to customize the WYSIWYG and the block editor interfaces with new plugins, and our answer has been to adapt the interface into an extension and add the customizations yourself.\u003C/p>\u003Cp>While that isn't any different, we've now got these 2 interfaces, available as boilerplate extensions with guides on adding plugins.\u003C/p>\u003Cp>Speaker 0: This will get you started much quicker and let\u003C/p>\u003Cp>Speaker 2: you create the functionality you need. With all of these extensions, we hope that you find them useful. If you have any thoughts on them and you've got feedback, we'd love to hear from it. You can find all of these extensions in the directors lab slash extensions repo on GitHub.\u003C/p>\u003Cp>Speaker 0: We have new content this all right, that is the extensions for this month. Hopefully you can still all hear me again when I change between, so the next step sorry, yes, amazing, we also have, new content for you so, we have on Directus TV which for the people that might not have heard about it you are already on it because of the link, so congrats. You're already in the right place. Directors TV is where we have a whole bunch of educational and entertaining shows, and the latest one that we have just released the first few episodes of is Directors Academy. That is Kevin taking you through the different tools as part of Directors.\u003C/p>\u003Cp>Now if you use Directors all the time, this might not be the one for you. But if you are new or still getting to grips with everything that directors can do, this is a really great set of resources to show you exactly how to get around, parts of directors. And thank you, Kevin, for the link so that you can just move along, into it and check it out for yourself. Next up, we have Wrike, who is our CTO, talking through a very special edition of what's in your doc. If you haven't heard of what's in your doc, what's in your doc is another show that we usually have on directors TV with different people who tell us through the tools that they use, in everyday, life for their jobs and we are so lucky that Wrike has got one for this, month so I'm gonna pass it over to Wrike.\u003C/p>\u003Cp>Speaker 3: Hey. How's it going? So for my daily devices, I use a MacBook Pro in 2021, an iPad Pro, and an iPhone 15 Pro Max. Most of my day to day consists of a split between, you know, doing a lot of meetings, programming, and a bit of design on the side. For those meetings, I use a Sony Alpha 64100 with a 16 mil Sigma Prime Lens.\u003C/p>\u003Cp>I do have an Elgato prompter to make it look like I'm looking at you instead of a screen off to the side, and I use a Blue Yeti mic, a Yeti x. I also use a Logi Lytra Glow for a little bit of extra light. And when the meetings are a little bit less interesting, I have a little Tetris mic recart on my desk, off screen. Don't tell anyone. When it comes to software, let's take a look at the dock left to right first.\u003C/p>\u003Cp>1st and foremost, I use Arc as a browser. I am the type of person that doesn't really do more than 5 taps open at a time, or I'm losing my mind. So Arcs' organization tools for renaming tabs, making folders, having spaces has really been a game changer for my productivity in that space. Although, I do have to admit, tabs that go to a different space go there to die and then get deleted anyways after a long while. For the basic snail calendar reminders, I use the Apple standard apps.\u003C/p>\u003Cp>I have tried every new calendar app that comes out. I love experimenting with them. But at the end of the day, I always find myself coming back to the default ones as they basically do what I need them to do and nothing more. Right? They're very pleasing.\u003C/p>\u003Cp>At Directus, we use Notion for note taking. In meetings, we have a bunch of different teams and a bunch of documents. It's a bit unstructured, but that's kind of the beauty of Notion. And we use Linear for task management. So Linear, think of it as GitHub Issues as a separate app, which has really elevated our productivity in the especially the product team.\u003C/p>\u003Cp>Then we use Slack for communication with the team internally, and we use Discord for communication with the larger community of users, of Directus. When I'm programming, I similarly to calendar apps. I've tried various different apps. I recently tried Zed. I've been using some of the JetBrains stuff.\u003C/p>\u003Cp>I've been on Code at 2 way back in the day when that was a thing. I've tried Nova. I always come back to Versus Code for the last couple of years. I've set that up very customized. I'm one of the the weird ones that does it in light mode, with the 3 tap space setting.\u003C/p>\u003Cp>And I use Iterm on the side because I cannot deal with the built in terminal. Just a personal preference thing. For debugging databases, I'm a huge fan of TablePlus. So TablePlus is kind of PHPMyAdmin as a native app, but they support effectively every database under the sun, which is very, very nice. You have to learn the tool once, and then you can just use it, which is great for raw database management.\u003C/p>\u003Cp>So direct, you know, columns or insertions into databases. On the flip side of that, I use Repay API, previously known as Paul, as an API debugging tool. So it's kinda similar to Postman or Hopscotch or some of those tools, but has a magnative app. I'm still a UX designer at heart, so apps looking nice is a huge reason for me to use them over over something else. Then we use Figma for all the design files.\u003C/p>\u003Cp>I am a very big fan of FigJam as well for quick notes and figuring out projects and doing more product design or user experience design. And then last but not least, we have Reader and Ivory. So Reader is an RSS faint reader. I use that to stay up to date with a bunch of blogs and personal blogs that I like to follow for, any news in the tech industry or improvements to the web platform or any other interesting developments. And I use Ivory as my client for the VedaVerse.\u003C/p>\u003Cp>So I'm part of the Fostodon server right now, and I try to follow, again, interesting people on the Internet. And then last but not least, on the doctor's Spotify, I always got music playing. I mostly listen to everything is what I'm realizing now. There's there's a lot of pop funky stuff in there. There's a lot of alt rock in there, and there's a lot of a little bit of pop sometimes if I just wanna focus a little bit and not care about music.\u003C/p>\u003Cp>Sometimes I have my own stuff on repeat to get the numbers up because you gotta game the system a little bit. Outside of the dock, I am a huge fan of a new app that just came out from Syndra called Scratchpad, which is just a little icon in your your menu bar. The only thing it does is it just opens a tiny note, and and it goes away when you click it again. So it's just great for a quick in the middle of a meeting, I have to jot something down, I don't know where it goes. I need to have something to write in within a split second.\u003C/p>\u003Cp>Fantastic for that. I use one password for all of the password management. Couldn't do without. Use CleanShot for screenshots and screen recordings. Highly recommend that one.\u003C/p>\u003Cp>That is that is one I cannot do without nowadays. And then the main thing that I install on every machine every time is called Paste. So it's a clipboard manager, similar to the reasoning behind Repet API. It's a MEC native thing. It feels like it was designed by Apple, and I'm sure they get shirts at some point, and I'd be set when that happens.\u003C/p>\u003Cp>To write. What else? What else do we have here? Oh, yeah. So the the the hobby stops.\u003C/p>\u003Cp>Sorry. Outside of work, I like to write and play a lot of music. So one thing I have right off of my desk here is just there's an acoustic guitar sitting ready to go in a demo at any moment. You see, of course, you know, some guitars on the wall. There's there's too many in my apartment here.\u003C/p>\u003Cp>For that, on the computer, I use Logic Pro Reader Report through my, Line 6 HX Stomp XL as an interface. And other than that, what we got going on in here? Oh, yeah. Less little desk gadgets. I brought it up.\u003C/p>\u003Cp>Before, I have a little Tetris MicroCard. I don't know if they still make them, but this this gets used a little bit too much in the day. Great way to take a little break. I have an analog Nixie clock sitting here on my desk as a way to keep the time as if that's not a thing on my computer. And one sort of guilty pleasure that I thought it was gonna be stupid, but I cannot do without nowadays, is an Amber mug.\u003C/p>\u003Cp>They're the most again, when I when I bought it, I thought it was gonna be stupid as hell in Ellen's books. So recommend one of those as well. I have a little, Belkin wireless charger to prop my phone up and a Sonos on the desk for all of the music that I previously mentioned. And I think that's everything I have around me.\u003C/p>\u003Cp>Speaker 0: Alright. Amazing. Thanks so much, Royce, for taking us through What's in Your Doc. And if you want to see the other episodes, they're really great for finding new recommendations. I believe Kevin has put a link, over for you in the chat as well.\u003C/p>\u003Cp>I know we shouldn't have favorite segments, but personally, my favorite segment isn't it is the next one. We have the community showcase, and for this month, we have, Manuel Yang talking through website dotai, a chat to edit page builder. So I'm gonna hand over to Manuel now.\u003C/p>\u003Cp>Speaker 4: Hey, everyone. I'm Manuel, and I'm building website dotai, a chat to edit page builder. You can now skip the learning curve and chat with your landing page, just like you would with a developer. You can add advanced widgets or fancy animations super easily without learning how to code. So what was the motivation for me?\u003C/p>\u003Cp>I used a lot of the page builders out there, such as, like, Webflow, Framer, Bubble. And I've also implemented one myself for users at the company I currently work at. We use it to build out interactive article style pages for sponsored content. And I realized the biggest bottleneck was the learning curve needed to actually use the tool. Right?\u003C/p>\u003Cp>For example, with, these no code builders, you still need to know how basic CSS works, right? Such as padding or Flexbox. And most users that are trying to build out a page won't have this knowledge. So the goal was to provide a way a user can use natural language to build out a page while still giving them their traditional editing tools. So So the idea is that this makes it very flexible and gives you the benefit of iterating quickly without needing to wait for the back and forth with a developer where communication challenges can also delay timelines.\u003C/p>\u003Cp>You also get a lot of the AI features out of the box, such as copywriting so that you don't need to switch Windows copy and paste text. For example, if you want to rephrase all text in your landing page, you can literally just chat, rephrase all text in the landing page, have a more friendly tone, and then boom, press enter. So all that pretty cool stuff. Right? So, how did I approach building it?\u003C/p>\u003Cp>Yeah. When I started the build, I already knew Direct This was gonna be a part of Stacks since, you know, a page builder will need some sort of content management system to persist and edit the data. And I've also always been a fan of Directus since they used their front end framework. Vuego has been my go tos that first came out. I think it's pretty dope.\u003C/p>\u003Cp>However, one side, one downside of the developing modules inside of Directus is the lack of depth tool integration. And I know I can just copy over the source code, but it's been pretty nice and clean to be able to just run a Docker image with some extensions. Right? I've also considered using Supabase instead, but realized it was a bit of overkill for my needs, and it would a lot of it would add a lot of extra complexity I didn't need. And I needed something I can self host pretty easily and Directus provided everything I needed.\u003C/p>\u003Cp>Yeah. So for biggest challenges, for me was the prompts. Right? Getting the right prompt and iterating over it to get exactly how I want it to be was pretty tough. I'm sure most people who can develop what AI knows that getting consistent results can be a challenge sometimes.\u003C/p>\u003Cp>And I originally implemented this in a way where I would have the AI spit out Graef JS specific JavaScript code, which should get executed in the browser. But now I'm moving towards more of a RAG and artifact style architecture, which I think will be a lot more robust. So looking forward to that. And then probably the biggest challenge for me is marketing. Right?\u003C/p>\u003Cp>As a dev, I start with zero marketing skills, but was forced to learn in order to get the word out. And I'm doing things like build in public and some email marketing, but, you know, I'm still learning as I go. It's been pretty fun though. And, looking forward to other techniques that I can learn. But, yeah, in terms of expansions, yeah, I mean, I'm always looking for someone to help out with marketing or design.\u003C/p>\u003Cp>I do have a call with a designer sometime in the next week to try to see what I can do to improve the UI and the UX. But, yeah, always open to more users to help me test out the, app as well, make sure it aligns what you guys are looking for. Because right now, I'm just you know, maybe I can be a little tunnel vision sometimes, but just building it to what I need. But, yeah, that's about it. Thanks, guys.\u003C/p>\u003Cp>Bye.\u003C/p>\u003Cp>Speaker 0: Alright. Thanks so much, Manuel, for attending to take part. We appreciate it. And it is always, very cool to see what people are building with directors. If you have been inspired and want to see more, check out the I Made This channel in Discord.\u003C/p>\u003Cp>Lots of people are talking through what they're building and what's especially nice in my opinion is that often they will come back and update us too so we get to see kind of the work in progress and how people are getting along. Next up, we have Kevin with a short tutorial on complex media transformations. So I will pass over to him.\u003C/p>\u003Cp>Speaker 1: We see a ton of questions come through from the community. And when we see questions repeated, we tend to create some kind of content to answer that question to help you and us answer it in future. And this time, we're gonna talk about advanced image transformation. Now this is all rooted in the node Sharp library, but before we get on to that, let me show you a little bit about how less advanced, custom image transformation actually work. So, in case you didn't already know, every single image, every single file stored in your Director's project can be accessed via the URL of the director's project/assets/and then the ID of the file itself.\u003C/p>\u003Cp>And here we have this nice image of boats. It's a portrait image. And here in the docs, we see inside of the file, API reference that we can request a thumbnail or an image transformation. Now out of the box, Directus automatically, or for free I suppose, implements a set of very common transformations, things like fit, width and height, quality, and file format. So, let's just show how these work.\u003C/p>\u003Cp>Here we see width, so we can go width equals, I don't know, 300. And we see that the image is a lot smaller. It's 300 pixels wide. And what's actually happening there is when we're making that request for the first time, Directus Inn in the background is going to use the Node Sharp Image Transformation Library, transform the asset, store it in our asset storage, and then return it. And then if we request it a second time, it isn't gonna do the processing.\u003C/p>\u003Cp>Instead, it's just going to serve up the already transformed image, which is a lot more performant. But we can add as many, as many, of these custom transformations as we want. But this is only a small number of what is offered. Today, we're gonna talk about advanced transformations. So Directus exposes the Node Sharp library.\u003C/p>\u003Cp>Let's take a little look at this here. And allows us to use it via a transforms query parameter. These are things like rotating an image, flipping or flopping. You can blur it. There's also color manipulation, things like tinting towards a provided color and so on.\u003C/p>\u003Cp>And what I wanna help you do is look at this API reference that Sharp offer and understand how to turn that into a Directus, advanced transformation. So let's start with rotate. So the only thing that is strictly required here is an angle, which is a number here. It is called rotate. Right?\u003C/p>\u003Cp>The actual, the actual, function itself, the operation itself is called rotate, and it requires an angle. Keep that in your mind. So let's use the instead of width, let's use transforms. And transforms is a 2 d array. So we have to start with an outer array and each operation has an array inside of it.\u003C/p>\u003Cp>First value is the name of the operation, so rotate. And the next one is the amount we're rotating by. Let's say 90. And we see that the returned image there has been rotated 90 degrees. And we can add as many of these as we want.\u003C/p>\u003Cp>We have blur, for example, was in there as well. And this is a value, I think, between 0 a100, so we'll say 10. There you go. And we see there's a slight blur there. Let me just double check that it was out of a 100.\u003C/p>\u003Cp>Speaker 4: Doesn't specify.\u003C/p>\u003Cp>Speaker 1: Options sigma. A value between 0.3a1000. Not entirely sure. Not entirely sure. Anyway, that's that's the blur.\u003C/p>\u003Cp>Let's do another one here. Let's do, a flip. So we're gonna rotate it, then we're gonna flip it. And notice here that there was no additional parameters. That's because in preparing for this, I knew that it was just a Boolean.\u003C/p>\u003Cp>So you just need to provide there are no, like, options inside of that. Let's take a look at color manipulation as well. So we can provide a tint, and that tint can either be an object with an RGB value or a string which I believe passed by the colour module. Let's take a look. Which I believe can just be any, yeah, here we go.\u003C/p>\u003Cp>Can be any string here for CSS color. That's what's used under the hood by by Sharp. So if we go back into this, let's add one more here. Let's add a tint. And I think the easiest thing to do here will be just to pass a string, rgb, 255,\u003C/p>\u003Cp>Speaker 4: 0. Sure. And\u003C/p>\u003Cp>Speaker 1: again, that's gonna take a moment just to whoops. That's very red. It's gonna take a moment the first time, but on subsequent loads, it should be very, very quick, because that asset has already been created. Now this is a really long URL, but hopefully you see how to apply custom image transformations. The only other thing I kinda wanted to add here was just a note that you can also, generate them using the SDK.\u003C/p>\u003Cp>So here you can provide read asset role, the ID, and then you can use an array or a nested array of transforms in a little bit of a nicer way there. And this will return the full URL. So if you don't wanna construct it yourself manually each time, this is another option as well. So hopefully oh, I gotta get that off my screen. Hopefully, that gives you a little bit of an indication on how you can take the Sharp API reference and apply it to Directus using the transforms query parameter.\u003C/p>\u003Cp>Thanks for joining me, and I will hand back over to Beth.\u003C/p>\u003Cp>Speaker 2: We've got a new segment for this month's changelog called the reading list. We've asked some of the directors team for resource suggestions on things that they found interesting and educational, and so we've got some to share with you. The first is Charles Fillard's blog, there's no percentage 20, as in space, in file system naming and some of the logic behind that. Secondly, we've got notes on buttonedown. Com and their migration from buttonedown.email to buttonedown.com, including the process notes.\u003C/p>\u003Cp>We also have how to write a git commit message and why writing them well matters. We also have Inclusive Components, a blog about designing inclusive web interfaces piece by piece. And lastly, we have the 12 Factor app talking through a methodology for building web apps. Those are all of our reading suggestions for this month, if you would like to read them yourself we'll share the links in the comments on the deck at the end.\u003C/p>\u003Cp>Speaker 0: Alright. And I can see as we go that Kevin is actually putting the links down in the chat for you. So hopefully, you can check them out. And, if you've heard of them before we'd love to know that. Let us know in the chat if these are resources you are familiar with.\u003C/p>\u003Cp>If they are new we highly recommend checking them out and if you've also got any resources that you think you, everyone else would like to also read and would be educational if you've learned something new this month or anytime really and you've got like a go through recommendation we'd love to hear from you, we'd love to hear what you go to you to get your knowledge that would be great. So yeah, anyone got any thoughts in the chat while we've got a few minutes we could definitely have a share, but yeah if not I think the the chat recommendations that we've just shared, the links are in there for you as well. And hopefully, we'll be bringing this back, monthly so we can build a nice collection of resources between the team and so you'll have lots of different, interests covered as well because we only had 5 to showcase, but there's lots more to come, I'm sure. Cool. While, we're waiting to see, I'll be around on chat, but in the meantime, we've got some thanks to give out.\u003C/p>\u003Cp>Speaker 2: We want to take a moment to thank all of the contributors since the last month's change log, which encapsulates 11.0.2 to 11.1.0. The start to interview, he's so kindly given your time to improve the thorough of this project, and\u003C/p>\u003Cp>Speaker 0: we want to thank each\u003C/p>\u003Cp>Speaker 2: of you individually. So a massive thank you to Jun Hong for fixing bookmark duplication when rapidly switching between bookmarks, preventing a crash in the data studio when switching to the date type while configuring date time interface, improving the grid layout for radio and checkboxes interface, and fixing the length of icon fields in system collections, allowing to use icons with long names. Thank you to Azeri for fixing a read only mutation to fields in the store via item draw. Fixing an issue with the 1st column would be missing when importing some CSV files, fixing a typo for invalid aggregate query parameter log, and finally fixing the notification for Synch file exports to be sent out to users without requiring any permissions on directed notifications. Thank you to Dominic for improving the WYSIWYG editor to hide the toolbar if no toolbar items are selected, for ensuring the open detail in the sidebar is persisted across site navigation and reloads, her browser tab, and for adding item count to the notification drawer.\u003C/p>\u003Cp>Thank you to Crowe for adding persisted default value and nullable during field schema updates. Thank you to Matt for introducing the user invite token TTL option allowing to configure the expiration of user invites. Thank you to SEM for improving selection label of the new tab checkbox in the HTML rich text editor. Thank you to Florian for fixing styling issues with the related values display. Thank you to Heiko for fixing the image tune menu toggle state indication in the block editor interface.\u003C/p>\u003Cp>Thank you to Bernard for fixing an issue that would cause local extensions built via workspaces to not be watched when extensions reload if active. Thank you to Gerard for fixing the generated open API specs to include post patch and delete path. Thank you to Eduard for fixing an outdated property name in their permissions typing. Thank you to Elle For fixing director's policy policy typescript declaration. And thank you to Andrew for fixing an issue that would cause Cloudinary to throw an inconsistent check sign.\u003C/p>\u003Cp>Thank you again to all of the, above people. You can see there's specific flow requests inside of the full release notes on GitHub. While we're saying thank you, I also want to give a massive thank you to the GitHub Sponsors for August. These are all of our amazing sponsors, who kindly financially contribute to their excellent development, and I want to give a special huge thank you to Clement and until this month as well.\u003C/p>\u003Cp>Speaker 0: All right that concludes the, thank yous for the contributors and the sponsors but lastly a massive thank you to you for, showing up and keeping us company and hopefully learning some new things about what is new with Directus for this month. We would absolutely love to see you again next month, for the same time. And on Thursday, so in 2 days' time, we also have another event, which is the regularly recurring request review. Oh, didn't mean to, like, triple, quadruple, illiterate that. The request review, It happens about every 2 weeks and, there is more information on the Discord events, now for the next 2 minimum if not more yet the regular recurring request review, Kevin.\u003C/p>\u003Cp>It's a lot of hours, but it's great. We go through and talk about, the request and what's going on and moving forward and exactly, Jonathan is hosting too. So yeah join us for that we hope you will be around, we always want feedback with the change log, as well so if you have any segments that you would like to request for this then we absolutely want to hear it. You can reach out to us in Discord and, yeah, hopefully we will see you next time. Thanks so much for joining.\u003C/p>","Welcome to the second version of the change log. If you didn't catch the last one, which was our very first one, welcome. Nice to have you here. The change log is where we go through what is new with directors this last month, and then we've also got some fun segments as well, so you're in for a treat, stick around. But the very first one is going to be Kevin taking it away with what is new with product, so hopefully you can hear this as well. Last week, we released Directus 11.1, and with it, a major new feature, which is useful for every Directus project but really impactful for users of Directus Cloud, where Directus runs on our infrastructure, and that feature is log streaming. Let me show you how it works. Okay. So here we have a system logs, kind of session already begun over here. And this is ultimately a debugging tool to help you understand what requests are being made in your Director's project. So as I click around, you will see here that logs are being shown over on the left hand side. And that, of course, also includes errors, that may be happening, so you can have a little bit more of an idea of how that's happening. You can click into any given request and get a little bit more information about it. And you can filter all of the logs here, by log level. By default they're all enabled. And if you're running a Node Directus instance, you can also specify which, which nodes or instances you want to see logs for. You can access this straight from your project settings here from Directus version 11.1.0, and you can change the logging style by changing the log style environment variable. Now, like always, we are open to feedback, so we'd love to see, your feedback about this feature, but hope you find it useful. In the last month, there have also been a couple of smaller releases of Directus before 11.1, and these included some notable new features. Firstly, we added support for listening on Unix sockets instead of a host and port, which allows for inter process communication. This was a community contribution, so thank you very much for that. You can now also use an environment variable to configure how long invites last before they expire. This is really helpful if you have to create invites, but they were tending to expire before being used. And finally, we have also added support for indices via a new is indexed field, which means you don't have to do this directly in your database anymore, but can instead use Directus. So that's what's new across Directus version 11.0.2, 11.0.3, and Directus 11.1.0. They're available now on Docker Hub and on Directus Cloud, and we can't wait for you to use them. Alright. Thank you so much for this time, Beth. I'm gonna hand back over to you. I'm gonna take you through what's new with Directors Labs. And as a quick reminder, Directors Labs is our experimental extension location where we regularly release new extensions we think are cool, and we hope you agree. So if I open up our demo for you and check that it's her. Yes. It is. Within flows, the first two to talk about are both email focused. Firstly, the liquid JS template operation, which enables dynamically generated content creation, such as personalized emails or really any scenario where you need to combine data with templates within a flow. Templates can be configured in the flow as a custom template or sourced from a collection. You can dynamically create different outputs based on multiple items. Here, the data is an array of users. You can use the liquid templating language, including loops and conditionals, injecting custom data in the data chain using these slightly altered liquid delimiters. If I go into the logs here, here is the output of the operation as well. That is the first, that runs into our second to talk about which is the resend email operation which integrates resend's email API into your director's flow. So here you, we are preparing the emails to send via resend, It's using the templates returned from the previous operation as the HTML property. And if we go into the resend operation itself, the operation supports most of resend's, endpoints along with the various options that we pass in the array from the previous operation. So there are 2 email focused operations. We go into insights for the panel demo, which are our next 3 to talk about. They look good. This one is the table in insight panel, which facilitates data from across multiple tables. And if you click an item, it'll open the director's editor drawer, but you can see here under socks. The next is the plausible analytics panel. This is part of a bundle and embeds your plausible analytics right within your director's project. I believe we're using the plausible sample data for this, which are the graphs that you're seeing. And lastly, another part of a bundle panel is the flow trigger panel that allows you to run manually trigger flows from right within a dashboard. If we go into content, you can also see the matching interfaces as part of the plausible analytics bundle and the flow trigger bundle. So you can trigger a flow or show a page level analytics dashboard as an interface as part of those as well. Next, we have the list interface, a small UI and UX, experiment for tags. So you can't reorder tags. You need to remove and re add them in order. This interface is a mix of tags and a repeater, and you can easily add and reorder strings. There's also full keyboard support with that as well. Lastly, I am gonna move location to show you. Here. Perfect. This is a global command palette now available along with a global search. So this module enables a command k shortcut that lets you navigate to collections, like so. Team. Not he, team. What else can I show you here? So, we can also search collections. So if we say search resources, like so, and I'd be looking for a spreadsheet, like so. And in the moment, if I wanted to create a new item, I could do that by create a to z partners. And, for example, this also allows run context aware actions like copying the API URL or running flows. It's gonna be a really nice tool for power users to navigate the data studio more quickly. I know I said lastly, but I have got a bonus for you. This isn't an extension, but it is for extension authors. We do often get asked how to customize the WYSIWYG and the block editor interfaces with new plugins, and our answer has been to adapt the interface into an extension and add the customizations yourself. While that isn't any different, we've now got these 2 interfaces, available as boilerplate extensions with guides on adding plugins. This will get you started much quicker and let you create the functionality you need. With all of these extensions, we hope that you find them useful. If you have any thoughts on them and you've got feedback, we'd love to hear from it. You can find all of these extensions in the directors lab slash extensions repo on GitHub. We have new content this all right, that is the extensions for this month. Hopefully you can still all hear me again when I change between, so the next step sorry, yes, amazing, we also have, new content for you so, we have on Directus TV which for the people that might not have heard about it you are already on it because of the link, so congrats. You're already in the right place. Directors TV is where we have a whole bunch of educational and entertaining shows, and the latest one that we have just released the first few episodes of is Directors Academy. That is Kevin taking you through the different tools as part of Directors. Now if you use Directors all the time, this might not be the one for you. But if you are new or still getting to grips with everything that directors can do, this is a really great set of resources to show you exactly how to get around, parts of directors. And thank you, Kevin, for the link so that you can just move along, into it and check it out for yourself. Next up, we have Wrike, who is our CTO, talking through a very special edition of what's in your doc. If you haven't heard of what's in your doc, what's in your doc is another show that we usually have on directors TV with different people who tell us through the tools that they use, in everyday, life for their jobs and we are so lucky that Wrike has got one for this, month so I'm gonna pass it over to Wrike. Hey. How's it going? So for my daily devices, I use a MacBook Pro in 2021, an iPad Pro, and an iPhone 15 Pro Max. Most of my day to day consists of a split between, you know, doing a lot of meetings, programming, and a bit of design on the side. For those meetings, I use a Sony Alpha 64100 with a 16 mil Sigma Prime Lens. I do have an Elgato prompter to make it look like I'm looking at you instead of a screen off to the side, and I use a Blue Yeti mic, a Yeti x. I also use a Logi Lytra Glow for a little bit of extra light. And when the meetings are a little bit less interesting, I have a little Tetris mic recart on my desk, off screen. Don't tell anyone. When it comes to software, let's take a look at the dock left to right first. 1st and foremost, I use Arc as a browser. I am the type of person that doesn't really do more than 5 taps open at a time, or I'm losing my mind. So Arcs' organization tools for renaming tabs, making folders, having spaces has really been a game changer for my productivity in that space. Although, I do have to admit, tabs that go to a different space go there to die and then get deleted anyways after a long while. For the basic snail calendar reminders, I use the Apple standard apps. I have tried every new calendar app that comes out. I love experimenting with them. But at the end of the day, I always find myself coming back to the default ones as they basically do what I need them to do and nothing more. Right? They're very pleasing. At Directus, we use Notion for note taking. In meetings, we have a bunch of different teams and a bunch of documents. It's a bit unstructured, but that's kind of the beauty of Notion. And we use Linear for task management. So Linear, think of it as GitHub Issues as a separate app, which has really elevated our productivity in the especially the product team. Then we use Slack for communication with the team internally, and we use Discord for communication with the larger community of users, of Directus. When I'm programming, I similarly to calendar apps. I've tried various different apps. I recently tried Zed. I've been using some of the JetBrains stuff. I've been on Code at 2 way back in the day when that was a thing. I've tried Nova. I always come back to Versus Code for the last couple of years. I've set that up very customized. I'm one of the the weird ones that does it in light mode, with the 3 tap space setting. And I use Iterm on the side because I cannot deal with the built in terminal. Just a personal preference thing. For debugging databases, I'm a huge fan of TablePlus. So TablePlus is kind of PHPMyAdmin as a native app, but they support effectively every database under the sun, which is very, very nice. You have to learn the tool once, and then you can just use it, which is great for raw database management. So direct, you know, columns or insertions into databases. On the flip side of that, I use Repay API, previously known as Paul, as an API debugging tool. So it's kinda similar to Postman or Hopscotch or some of those tools, but has a magnative app. I'm still a UX designer at heart, so apps looking nice is a huge reason for me to use them over over something else. Then we use Figma for all the design files. I am a very big fan of FigJam as well for quick notes and figuring out projects and doing more product design or user experience design. And then last but not least, we have Reader and Ivory. So Reader is an RSS faint reader. I use that to stay up to date with a bunch of blogs and personal blogs that I like to follow for, any news in the tech industry or improvements to the web platform or any other interesting developments. And I use Ivory as my client for the VedaVerse. So I'm part of the Fostodon server right now, and I try to follow, again, interesting people on the Internet. And then last but not least, on the doctor's Spotify, I always got music playing. I mostly listen to everything is what I'm realizing now. There's there's a lot of pop funky stuff in there. There's a lot of alt rock in there, and there's a lot of a little bit of pop sometimes if I just wanna focus a little bit and not care about music. Sometimes I have my own stuff on repeat to get the numbers up because you gotta game the system a little bit. Outside of the dock, I am a huge fan of a new app that just came out from Syndra called Scratchpad, which is just a little icon in your your menu bar. The only thing it does is it just opens a tiny note, and and it goes away when you click it again. So it's just great for a quick in the middle of a meeting, I have to jot something down, I don't know where it goes. I need to have something to write in within a split second. Fantastic for that. I use one password for all of the password management. Couldn't do without. Use CleanShot for screenshots and screen recordings. Highly recommend that one. That is that is one I cannot do without nowadays. And then the main thing that I install on every machine every time is called Paste. So it's a clipboard manager, similar to the reasoning behind Repet API. It's a MEC native thing. It feels like it was designed by Apple, and I'm sure they get shirts at some point, and I'd be set when that happens. To write. What else? What else do we have here? Oh, yeah. So the the the hobby stops. Sorry. Outside of work, I like to write and play a lot of music. So one thing I have right off of my desk here is just there's an acoustic guitar sitting ready to go in a demo at any moment. You see, of course, you know, some guitars on the wall. There's there's too many in my apartment here. For that, on the computer, I use Logic Pro Reader Report through my, Line 6 HX Stomp XL as an interface. And other than that, what we got going on in here? Oh, yeah. Less little desk gadgets. I brought it up. Before, I have a little Tetris MicroCard. I don't know if they still make them, but this this gets used a little bit too much in the day. Great way to take a little break. I have an analog Nixie clock sitting here on my desk as a way to keep the time as if that's not a thing on my computer. And one sort of guilty pleasure that I thought it was gonna be stupid, but I cannot do without nowadays, is an Amber mug. They're the most again, when I when I bought it, I thought it was gonna be stupid as hell in Ellen's books. So recommend one of those as well. I have a little, Belkin wireless charger to prop my phone up and a Sonos on the desk for all of the music that I previously mentioned. And I think that's everything I have around me. Alright. Amazing. Thanks so much, Royce, for taking us through What's in Your Doc. And if you want to see the other episodes, they're really great for finding new recommendations. I believe Kevin has put a link, over for you in the chat as well. I know we shouldn't have favorite segments, but personally, my favorite segment isn't it is the next one. We have the community showcase, and for this month, we have, Manuel Yang talking through website dotai, a chat to edit page builder. So I'm gonna hand over to Manuel now. Hey, everyone. I'm Manuel, and I'm building website dotai, a chat to edit page builder. You can now skip the learning curve and chat with your landing page, just like you would with a developer. You can add advanced widgets or fancy animations super easily without learning how to code. So what was the motivation for me? I used a lot of the page builders out there, such as, like, Webflow, Framer, Bubble. And I've also implemented one myself for users at the company I currently work at. We use it to build out interactive article style pages for sponsored content. And I realized the biggest bottleneck was the learning curve needed to actually use the tool. Right? For example, with, these no code builders, you still need to know how basic CSS works, right? Such as padding or Flexbox. And most users that are trying to build out a page won't have this knowledge. So the goal was to provide a way a user can use natural language to build out a page while still giving them their traditional editing tools. So So the idea is that this makes it very flexible and gives you the benefit of iterating quickly without needing to wait for the back and forth with a developer where communication challenges can also delay timelines. You also get a lot of the AI features out of the box, such as copywriting so that you don't need to switch Windows copy and paste text. For example, if you want to rephrase all text in your landing page, you can literally just chat, rephrase all text in the landing page, have a more friendly tone, and then boom, press enter. So all that pretty cool stuff. Right? So, how did I approach building it? Yeah. When I started the build, I already knew Direct This was gonna be a part of Stacks since, you know, a page builder will need some sort of content management system to persist and edit the data. And I've also always been a fan of Directus since they used their front end framework. Vuego has been my go tos that first came out. I think it's pretty dope. However, one side, one downside of the developing modules inside of Directus is the lack of depth tool integration. And I know I can just copy over the source code, but it's been pretty nice and clean to be able to just run a Docker image with some extensions. Right? I've also considered using Supabase instead, but realized it was a bit of overkill for my needs, and it would a lot of it would add a lot of extra complexity I didn't need. And I needed something I can self host pretty easily and Directus provided everything I needed. Yeah. So for biggest challenges, for me was the prompts. Right? Getting the right prompt and iterating over it to get exactly how I want it to be was pretty tough. I'm sure most people who can develop what AI knows that getting consistent results can be a challenge sometimes. And I originally implemented this in a way where I would have the AI spit out Graef JS specific JavaScript code, which should get executed in the browser. But now I'm moving towards more of a RAG and artifact style architecture, which I think will be a lot more robust. So looking forward to that. And then probably the biggest challenge for me is marketing. Right? As a dev, I start with zero marketing skills, but was forced to learn in order to get the word out. And I'm doing things like build in public and some email marketing, but, you know, I'm still learning as I go. It's been pretty fun though. And, looking forward to other techniques that I can learn. But, yeah, in terms of expansions, yeah, I mean, I'm always looking for someone to help out with marketing or design. I do have a call with a designer sometime in the next week to try to see what I can do to improve the UI and the UX. But, yeah, always open to more users to help me test out the, app as well, make sure it aligns what you guys are looking for. Because right now, I'm just you know, maybe I can be a little tunnel vision sometimes, but just building it to what I need. But, yeah, that's about it. Thanks, guys. Bye. Alright. Thanks so much, Manuel, for attending to take part. We appreciate it. And it is always, very cool to see what people are building with directors. If you have been inspired and want to see more, check out the I Made This channel in Discord. Lots of people are talking through what they're building and what's especially nice in my opinion is that often they will come back and update us too so we get to see kind of the work in progress and how people are getting along. Next up, we have Kevin with a short tutorial on complex media transformations. So I will pass over to him. We see a ton of questions come through from the community. And when we see questions repeated, we tend to create some kind of content to answer that question to help you and us answer it in future. And this time, we're gonna talk about advanced image transformation. Now this is all rooted in the node Sharp library, but before we get on to that, let me show you a little bit about how less advanced, custom image transformation actually work. So, in case you didn't already know, every single image, every single file stored in your Director's project can be accessed via the URL of the director's project/assets/and then the ID of the file itself. And here we have this nice image of boats. It's a portrait image. And here in the docs, we see inside of the file, API reference that we can request a thumbnail or an image transformation. Now out of the box, Directus automatically, or for free I suppose, implements a set of very common transformations, things like fit, width and height, quality, and file format. So, let's just show how these work. Here we see width, so we can go width equals, I don't know, 300. And we see that the image is a lot smaller. It's 300 pixels wide. And what's actually happening there is when we're making that request for the first time, Directus Inn in the background is going to use the Node Sharp Image Transformation Library, transform the asset, store it in our asset storage, and then return it. And then if we request it a second time, it isn't gonna do the processing. Instead, it's just going to serve up the already transformed image, which is a lot more performant. But we can add as many, as many, of these custom transformations as we want. But this is only a small number of what is offered. Today, we're gonna talk about advanced transformations. So Directus exposes the Node Sharp library. Let's take a little look at this here. And allows us to use it via a transforms query parameter. These are things like rotating an image, flipping or flopping. You can blur it. There's also color manipulation, things like tinting towards a provided color and so on. And what I wanna help you do is look at this API reference that Sharp offer and understand how to turn that into a Directus, advanced transformation. So let's start with rotate. So the only thing that is strictly required here is an angle, which is a number here. It is called rotate. Right? The actual, the actual, function itself, the operation itself is called rotate, and it requires an angle. Keep that in your mind. So let's use the instead of width, let's use transforms. And transforms is a 2 d array. So we have to start with an outer array and each operation has an array inside of it. First value is the name of the operation, so rotate. And the next one is the amount we're rotating by. Let's say 90. And we see that the returned image there has been rotated 90 degrees. And we can add as many of these as we want. We have blur, for example, was in there as well. And this is a value, I think, between 0 a100, so we'll say 10. There you go. And we see there's a slight blur there. Let me just double check that it was out of a 100. Doesn't specify. Options sigma. A value between 0.3a1000. Not entirely sure. Not entirely sure. Anyway, that's that's the blur. Let's do another one here. Let's do, a flip. So we're gonna rotate it, then we're gonna flip it. And notice here that there was no additional parameters. That's because in preparing for this, I knew that it was just a Boolean. So you just need to provide there are no, like, options inside of that. Let's take a look at color manipulation as well. So we can provide a tint, and that tint can either be an object with an RGB value or a string which I believe passed by the colour module. Let's take a look. Which I believe can just be any, yeah, here we go. Can be any string here for CSS color. That's what's used under the hood by by Sharp. So if we go back into this, let's add one more here. Let's add a tint. And I think the easiest thing to do here will be just to pass a string, rgb, 255, 0. Sure. And again, that's gonna take a moment just to whoops. That's very red. It's gonna take a moment the first time, but on subsequent loads, it should be very, very quick, because that asset has already been created. Now this is a really long URL, but hopefully you see how to apply custom image transformations. The only other thing I kinda wanted to add here was just a note that you can also, generate them using the SDK. So here you can provide read asset role, the ID, and then you can use an array or a nested array of transforms in a little bit of a nicer way there. And this will return the full URL. So if you don't wanna construct it yourself manually each time, this is another option as well. So hopefully oh, I gotta get that off my screen. Hopefully, that gives you a little bit of an indication on how you can take the Sharp API reference and apply it to Directus using the transforms query parameter. Thanks for joining me, and I will hand back over to Beth. We've got a new segment for this month's changelog called the reading list. We've asked some of the directors team for resource suggestions on things that they found interesting and educational, and so we've got some to share with you. The first is Charles Fillard's blog, there's no percentage 20, as in space, in file system naming and some of the logic behind that. Secondly, we've got notes on buttonedown. Com and their migration from buttonedown.email to buttonedown.com, including the process notes. We also have how to write a git commit message and why writing them well matters. We also have Inclusive Components, a blog about designing inclusive web interfaces piece by piece. And lastly, we have the 12 Factor app talking through a methodology for building web apps. Those are all of our reading suggestions for this month, if you would like to read them yourself we'll share the links in the comments on the deck at the end. Alright. And I can see as we go that Kevin is actually putting the links down in the chat for you. So hopefully, you can check them out. And, if you've heard of them before we'd love to know that. Let us know in the chat if these are resources you are familiar with. If they are new we highly recommend checking them out and if you've also got any resources that you think you, everyone else would like to also read and would be educational if you've learned something new this month or anytime really and you've got like a go through recommendation we'd love to hear from you, we'd love to hear what you go to you to get your knowledge that would be great. So yeah, anyone got any thoughts in the chat while we've got a few minutes we could definitely have a share, but yeah if not I think the the chat recommendations that we've just shared, the links are in there for you as well. And hopefully, we'll be bringing this back, monthly so we can build a nice collection of resources between the team and so you'll have lots of different, interests covered as well because we only had 5 to showcase, but there's lots more to come, I'm sure. Cool. While, we're waiting to see, I'll be around on chat, but in the meantime, we've got some thanks to give out. We want to take a moment to thank all of the contributors since the last month's change log, which encapsulates 11.0.2 to 11.1.0. The start to interview, he's so kindly given your time to improve the thorough of this project, and we want to thank each of you individually. So a massive thank you to Jun Hong for fixing bookmark duplication when rapidly switching between bookmarks, preventing a crash in the data studio when switching to the date type while configuring date time interface, improving the grid layout for radio and checkboxes interface, and fixing the length of icon fields in system collections, allowing to use icons with long names. Thank you to Azeri for fixing a read only mutation to fields in the store via item draw. Fixing an issue with the 1st column would be missing when importing some CSV files, fixing a typo for invalid aggregate query parameter log, and finally fixing the notification for Synch file exports to be sent out to users without requiring any permissions on directed notifications. Thank you to Dominic for improving the WYSIWYG editor to hide the toolbar if no toolbar items are selected, for ensuring the open detail in the sidebar is persisted across site navigation and reloads, her browser tab, and for adding item count to the notification drawer. Thank you to Crowe for adding persisted default value and nullable during field schema updates. Thank you to Matt for introducing the user invite token TTL option allowing to configure the expiration of user invites. Thank you to SEM for improving selection label of the new tab checkbox in the HTML rich text editor. Thank you to Florian for fixing styling issues with the related values display. Thank you to Heiko for fixing the image tune menu toggle state indication in the block editor interface. Thank you to Bernard for fixing an issue that would cause local extensions built via workspaces to not be watched when extensions reload if active. Thank you to Gerard for fixing the generated open API specs to include post patch and delete path. Thank you to Eduard for fixing an outdated property name in their permissions typing. Thank you to Elle For fixing director's policy policy typescript declaration. And thank you to Andrew for fixing an issue that would cause Cloudinary to throw an inconsistent check sign. Thank you again to all of the, above people. You can see there's specific flow requests inside of the full release notes on GitHub. While we're saying thank you, I also want to give a massive thank you to the GitHub Sponsors for August. These are all of our amazing sponsors, who kindly financially contribute to their excellent development, and I want to give a special huge thank you to Clement and until this month as well. All right that concludes the, thank yous for the contributors and the sponsors but lastly a massive thank you to you for, showing up and keeping us company and hopefully learning some new things about what is new with Directus for this month. We would absolutely love to see you again next month, for the same time. And on Thursday, so in 2 days' time, we also have another event, which is the regularly recurring request review. Oh, didn't mean to, like, triple, quadruple, illiterate that. The request review, It happens about every 2 weeks and, there is more information on the Discord events, now for the next 2 minimum if not more yet the regular recurring request review, Kevin. It's a lot of hours, but it's great. We go through and talk about, the request and what's going on and moving forward and exactly, Jonathan is hosting too. So yeah join us for that we hope you will be around, we always want feedback with the change log, as well so if you have any segments that you would like to request for this then we absolutely want to hear it. You can reach out to us in Discord and, yeah, hopefully we will see you next time. Thanks so much for joining.","e0d5a954-3694-470e-9c84-05e0c7f533c5",[192,193,194],"18d8802c-262c-4079-a656-e74fef8dbbd5","c7695b89-faef-465b-ad0f-ccb858fc2fbd","33ae5a49-5b54-4c8c-a8a7-e2b6ba8cb2a3",[],{"id":152,"number":153,"show":122,"year":154,"episodes":197},[156,157,158,159,160],{"id":158,"slug":199,"vimeo_id":200,"description":201,"tile":202,"length":8,"resources":8,"people":8,"episode_number":134,"published":203,"title":204,"video_transcript_html":205,"video_transcript_text":206,"content":207,"seo":208,"status":130,"episode_people":209,"recommendations":214,"season":215},"3-october-2024","1019714535","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes a community showcase of a form builder from David, Carmen taking you through a docs preview and Kevin with a tutorial on AI web scraping API with flows.\n\n","f3b9ac10-251f-4708-ae07-51a29d1868b6","2024-10-16","October 2024","\u003Cp>Speaker 0: Alright. Hello, everyone. Hopefully, you can all hear me, and I am gonna take a pause and just check that that is the case. So if someone could let me know, that would be great. Oh, I was excited.\u003C/p>\n\u003Cp>Carmen's saying hello, and I'm still gonna wait. Loud and clear. Perfect. Thank you so much, Kevin. Welcome to October's version of the change log from Directus.\u003C/p>\n\u003Cp>If you're new here or if you've, joined us before, welcome. I hope you're having the most perfect day. I hope your day is not too hot, not too cold. It's like the crispest, best version of the day because that is what you deserve for joining us. Thank you for for being here.\u003C/p>\n\u003Cp>We have a great show for you planned. We've got some updates from Brian and myself from product and extensions, we've got Carmen with a docs update for what is upcoming and that's super exciting, we have Kevin with a quick connect tutorial. We've got the community showcase, and we've got a whole bunch of different things. I am joining from London. I would love to know, where you are all joining from.\u003C/p>\n\u003Cp>I can see that the chat is already busy. That is great. Please continue. We have team members in there answering all your questions. So, yeah, if you've got anything that you are thinking about, let us know based on anything we are saying.\u003C/p>\n\u003Cp>We also have the general chat in Discord for afterwards if it comes to you and you're like oh I should have said that feel free to keep the conversation moving there as well. Did anyone say where they're joining from so far? I see a lot of hellos. Oh, Netherlands, North Germany. Hello.\u003C/p>\n\u003Cp>Welcome. Welcome. Granada, Spain, Ukraine, Austria, Egypt, Sardinia, Nigeria. Amazing. Welcome, France too.\u003C/p>\n\u003Cp>Hello. Hello. Super happy for you all to be joining us. I am gonna hand over to you, Bryant, with some product updates for the first start of the show. So hope you enjoy them.\u003C/p>\n\u003Cp>Speaker 1: Brian here for Directus, and I've got 2 quick updates for you. Version 11.1.1 dropped last week with a load of bug fixes, optimizations, and a few dependency updates. I just wanted to give a quick shout out to our engineering team and the community members who are on fire at improving the Directus experience for you, for me, and the entire Directus community. There is however one breaking change. The underlying SendGrid package we were using is no longer maintained.\u003C/p>\n\u003Cp>So rather than risk your security or some type of crazy exploit, we've removed it. Now if you're using SendGrid as your direct to email provider, you'll want to switch up your config to use SMTP instead of their API. For the full list of fixes and updates, check the release notes in the Directus repository. Now on to my favorite update, probably because I had a little hand in shipping these. There's no bias here.\u003C/p>\n\u003Cp>I'm super excited to announce Directus cloud templates. These are handcrafted Directus instances with data models, permissions, flows, all the niceties already built out for you. Now, whenever you spin up a new project for your organization or your client inside Directus Cloud, you can get to 80% done by clicking one button. There are currently 3 templates to choose from. Simple CMS, which is great for your next website build.\u003C/p>\n\u003Cp>It's configured with the dynamic page builder, blog posts, menus, and even dynamic forms. Your content editors are going to love this one. Next up, we have simple CRM, which is the perfect starting point for your own custom Salesforce or HubSpot. It includes the standard fare, like organizations and contacts, deals and activities, and a configurable pipeline. Last but not least, we have simple ecommerce, which showcases a small online apparel or t shirt shop build out.\u003C/p>\n\u003Cp>The data model includes products, orders, customers, and it even handles more complex scenarios like product variance, which account for all the color and size combinations automatically. So hop on to Directus Cloud, spin up an instance, check them out, and as always, send us your feedback because we'll be releasing more of these templates in the coming months. And back over to you, Beth.\u003C/p>\n\u003Cp>Speaker 0: I'm going to demonstrate each of the new extensions in Directus Labs this month. As a reminder Directus Labs is our team's experimental org in GitHub which regularly publishes new extensions we think are cool. The Gantt chart layout displays items in a collection in a Gantt chart helping those of you who use Directus for project management and task management. When configuring the layout specify a label that you want displayed on each task, a start date and an end date, and optionally a dependency field which will draw dependency lines in a chart. You can specify the zoom in as granular as an hour and as broad as a year.\u003C/p>\n\u003Cp>You can download it now in the marketplace. A calculated fields interface is the most upvoted open feature request in the directors project and today we are releasing it as an extension. It allows you to write a formula and the value of the interface will be automatically computed and shown. It supports the full set of functions provided by formula. Js and the majority of JavaScript operators that work for numbers and strings.\u003C/p>\n\u003Cp>It also supports relational fields and we pass formulas to ensure they are only running allowed functions which is important for security. A couple of things that are important to note values here are only visible in the interface and not in API responses. We've had this extension in the works for a while, but just a couple of days ago, a community member, Judah Sullivan, released the Directus AutoGen Extension which you might also want to check out as it's similar Both are available in the marketplace The API metric panel can be used to display a value from an external API, for example, that could be the number of docker downloads or sales or followers on social media platforms As you can see here we are making a web request to get docker metrics. We could also provide custom headers or a request body if required. Then you specify the path of the value you want to display.\u003C/p>\n\u003Cp>It's a nice responsive panel that allows you to get an overview of your business. You can download this extension directly from GitHub or NPM. Lastly, one of our core team members, Tim, in his spare time released a pair of flow operations which allows authentication and permission checking. The first operation allows you to check whether the flow was triggered by a user with admin access, user access, or public access. The operation will return true if authenticated or else throw an error.\u003C/p>\n\u003Cp>The second operation allows you to select a collection and it will return true if a user has read permissions in that collection. You can check this out over on github and npm we hope you enjoy using all these extensions Gantt chart layout, calculated fields interface, the API metric panel and tims authentication and permission checks let's bring my camera back up and I'll see how you're doing. I brought my camera back up hopefully you can see me again. Yeah, as I said we are super excited for everything we've just announced. Out of the extensions we've just talked about or if there are any other extensions that you regularly use in the marketplace, now is a good time to let us know in the chat.\u003C/p>\n\u003Cp>I mean for me as someone who really really likes project management efficiency the Gantt chart layout is super exciting and Kevin has just put in the chat as well the extension link for you to check them out for yourself. Tim, I did see you. Brace look also same person, same super ability. We are very excited about the operations as well. So, yeah, if you have any, extensions that you think you're like, this has really changed the game for me, this has changed the way I use direct us, or if you're just like, this is cool and I'm excited to hear more about it, let us know in the chat, and we can have a chat about this right now.\u003C/p>\n\u003Cp>Kevin is saying that Florian's flexible editor interface is the one. Yes. I agree. That one is great too. And, yeah, as we said, shout out to you, Judah.\u003C/p>\n\u003Cp>I'm not sure if you are in the chat, but we were talking about this in Discord earlier, too. So do make sure to check out their contribution as well. Yeah. So those are the, four ones for the extensions this month. Every month, we aim to have more.\u003C/p>\n\u003Cp>And if you are looking at where, to go, the extensions link is the best place. We do also have the extensions channel in Discord too, and the director's extension field, actions from Atomic Media is also a great one. I'm gonna move us along to the next part of the changelog, but feel free to keep the conversation going, via the chats whilst we're there. So I'm handing over to Carmen with a docs preview, which is super exciting. So I will send over to her now.\u003C/p>\n\u003Cp>Speaker 2: Hey, everyone. My name is Carmen. I'm a developer educator at Directus, and part of my role is documentation and that's what I'm going to be showing you today. We are about to launch a beta of our new documentation and I just wanna show you a little bit about what our motivations are, what we've done, and what's next. And, in order to do that, I'm gonna tell you a little bit about what three aspects of our documentation we're aiming to tackle.\u003C/p>\n\u003Cp>1 is content, the other is structure, and finally, the platform. So let's talk about the content. Over the years, starting from a very minimal set of documentation that served our needs, not only have we gotten a lot of feedback and requests for new pieces of documentation, but we've also seen lots of our team, lots of hands touch that documentation. And over time there have been different voices, there have been different tones and we just wanted to completely rewrite that. So everything that you will see in the new documentation, whether it's been brought over or adapted or written from scratch, will have been touched not just by me but by other educators.\u003C/p>\n\u003Cp>Next is structure. And so what we've done is sort of split it into 2 areas. 1 is a reference manual where you're looking at the exact parts of the documentation that you need just so that you can use Directus. But there's also an implementation side of it. You're not just using Directus in isolation.\u003C/p>\n\u003Cp>So we are also bringing in a set of tutorials so that you can work with directives, for example, with a specific framework, with a specific use case, maybe with a specific SSO provider. What we're doing here is hoping that we can make this sort of separation bring a lot of clarity to our documentation. Finally, there's our platform. When we started out, we were using VitePress which fulfilled so many of our needs. It came with a template that we could use and when we hit those limitations, we would extend them, make those parts our own, and adapt them as needed.\u003C/p>\n\u003Cp>But, with the opportunity of rewriting our documentation for scratch, we also wanted to have a brand new platform. We are rewriting our documentation using Nuxt. And I just wanna give a little shout out to one of our engineers, Connor, who's been spearheading this effort in a magnificent way. And finally, let's be honest, maintaining an API reference all in markdown can be quite cumbersome when manually written. So what we've set out to do is to have these API references also be automatically generated from code.\u003C/p>\n\u003Cp>So cool. Those are the 3 parts that we're addressing with our new documentation. But what's next? As I mentioned earlier, later this month, we'll be launching the 1st beta of the documentation. And this is where y'all come in.\u003C/p>\n\u003Cp>I'd love to ask you to please look over them, give us feedback, and tell us what we can do to improve this documentation for when we launch towards the end of the year. The other thing that we're going to be doing as well is to really look over all of our existing tutorials and audit them and bring them over. That does not mean that our old documentation is going to hide them our way. We're not gonna be hiding that old documentation or our tutorials. We're just going to be systematically bringing them over, making sure that they are correct, relevant, that they work with our current version of Directus and making sure that those tutorials stay in lockstep with new releases and new documentation.\u003C/p>\n\u003Cp>So that's it for me. Thank you so much for listening and I'll see you later.\u003C/p>\n\u003Cp>Speaker 0: Alright. As Kevin said in the chat, we are releasing that in the next couple of weeks. He's also put the link where you can find it. Super exciting. And I am also gonna be the 3rd person to say a massive big up to Connor and also a massive thank you to Carmen as well.\u003C/p>\n\u003Cp>We've now come to the my personal favorite part of the changelog which is the community showcase. Love seeing what everyone is building and how they are making directors their own And this month, we have a community showcase from David who is gonna be talking about the form builder project they're currently working on.\u003C/p>\n\u003Cp>Speaker 3: Hi. I'm David from. We are small digital studio based in Montreal. We've been working with directors for the last 2 years. And today, I'm going to talk to you about a small form builder extension that we've built for Dericus and that we're going to open source soon, hopefully.\u003C/p>\n\u003Cp>So let's start. So, the main feature that our clients have been missing since we migrated away from WordPress has been the form builder. Not sure if you're familiar with gravity forms, which is one form, complex form builder that is labeled in their WordPress ecosystem, that allow end users to configure forms, with conditions, with advanced fields, with notification, even integrations with external systems. So all those portions are quite easy to build with Directus apart from the advanced form builder. We were able to build a basic form builder using native features from directives, but they were not as easy for a end user to configure.\u003C/p>\n\u003Cp>In creating a complex form builders with conditions and wizards like features, is quite a big endeavor. So that's why we chose to, we actually started looking into open source project that could help us. And that's where we came across a library called survey gs. Survey so basically, survey gs has 2 main comp 2 main components. One is called survey creator.\u003C/p>\n\u003Cp>The survey creator is what the end user use to create the form or survey. It's quite powerful. And the other important portion is form library, or should I say what libraries? Now form libraries, they basically take in the JSON coming from the survey creator to render a form. They have library for Angular, Vue.\u003C/p>\n\u003Cp>Js, React, vanilla JavaScript, and probably other frameworks that for oh, yeah, and backbone, if they're still user of backbones. But anyway, yeah. So the only when we found that we found that it was basically doing everything we needed from a foreign perspective. So the only thing left was to integrate with Directus. And that's where we created our first extension, actually, our first or should I say first public extension for Directus?\u003C/p>\n\u003Cp>So let me jump into that. I'll do a quick demo of what we've built. The main features that we wanted to implement were, well, of course, integrating the survey creator, the ability to save forms or the form data in any collection, and finally send notification to either internal users or external users after form was filled. So here, as you can see, we have our small form module. So I'll jump into contact us form.\u003C/p>\n\u003Cp>I'll start with the form builder portion. Here, we have the basic form, 2 columns, first name, last name, or email. We have a drop down with some choices, subject of the the form. In here, we have our first condition. So, for example, I have a condition here that say if the subject is product information, then we will display what specific product information are you looking for.\u003C/p>\n\u003Cp>If it shows customer support, then instead, it's going to be what's your issue. I want this I won't demo all the features of, sorry. Js. There's a lot of documentation. You can look it up on their website.\u003C/p>\n\u003Cp>But, yeah, it's fairly powerful from builder. Then afterwards, we have the actual integration with Directus. So if you I go into the configuration of the form. Let me hide that for now. So, yeah, what we do have is the schema that was generated by the form builder.\u003C/p>\n\u003Cp>Technically, you could edit the schema itself, but it's easier to use the form builder instead. Please note, though, that the form builder of Suri. Js does require a license. We we do have the configuration to input your license in the extension, so that's good. But just so you're aware, it does require a license from, Suri.\u003C/p>\n\u003Cp>Js to use a survey creator. Anyway, so what I was saying is here, we have the configuration. So we could we can see that, it's submitting data to form submission collection. You can choose any collection that you want. You can create a new one.\u003C/p>\n\u003Cp>You can have multiple forms submitting to the same collection. It's really depend on your requirements, basically. We also have notification templates. I'll show I'll explain how notification templates work afterwards. And did I forget anything?\u003C/p>\n\u003Cp>No. I think that's pretty much it. So, yeah, actually, let's jump in into notification template first. So if somebody submit or fill in that form, as I mentioned, you can configure 1 or more notification templates. So let's jump into it.\u003C/p>\n\u003Cp>Form templates use like just flows. You can use any fields that was part of the form as as the recipient. For example, if you want them to have more than 1, you can add other recipient. In this case, we're using the field work email. But you could also add an hard coded one for, suppose, someone on your team.\u003C/p>\n\u003Cp>The template is itself is pure HTML, but same thing. There's basic templating, so you can use, variables from the from the form. In this case, the contact us form. So let's try and submit 13. So I'm gonna go back to my form, contact us form.\u003C/p>\n\u003Cp>And I didn't build my preview. Here in this case, it's an XGS application. So it's a React component that we built that is basically reading the schema here and passing the schema to the to the sorry. Js library. And once you're done submitting the form, it's going to call a webhook from Dactors to save the data.\u003C/p>\n\u003Cp>So let's try that. So of course, we do have validation. So let me fill the form. We based in North America. So we want to chat about product information, customer support.\u003C/p>\n\u003Cp>Yes. I'm not sure if this form is going to actually send email. Yeah. This field is not required. So I don't not gonna fill it.\u003C/p>\n\u003Cp>I'm just gonna complete the form. Thanks. No problem. So if we go into our contact us entries, we can see my entry, all the fields that were filled filled in with the data that was passed. And if we look at our notifications that were generated, we can see here we do have the new notification, the email that it was sent to, the actual content of the email.\u003C/p>\n\u003Cp>So you have a and a status, so you know if it it was fully sent or not. It does link back to the entry if needed that generate that that generated that notification. And once the form is submitted, we can see in my email that I received the confirmation template. Yes. So yeah.\u003C/p>\n\u003Cp>So that's pretty much how the, extension work. If we look at our flows, there's a couple of flows that need to be configured, but it's not that complex. Most of the features are built in feature from directors or survey GS. So most of the extension is gluing together the the 2 great products, basically. We do have some configuration that you can pass to the survey JS extension.\u003C/p>\n\u003Cp>So, for example, if you want to show the designer tab, the JSON tab, depending on your users, you might not want them to be able to see the JSON. So first of all, you can disable that, save the settings. And if you go back to the actual form, you see I don't have access to the JSON editor here. So we made that we made sure that we could configure every settings from, survey survey creator directly from directors. So, hopefully, it's an extension that, some of you will find useful.\u003C/p>\n\u003Cp>We're hoping to release the extension in the next month. We just wanna make sure that it come with clear installation instruction. But, yeah, it was the main feature for us that was missing from Directus. Everything else has been great. We're really happy having migrating from WordPress to Directus.\u003C/p>\n\u003Cp>And with that last missing piece of the puzzle, we have we now have a complete toolkit to, finalize our projects. So thank you very much.\u003C/p>\n\u003Cp>Speaker 0: Alright. Thank you so much to you, David, for taking, the time to take us through that. I'm super excited for it to become available hopefully soon. I think it will make a great addition and if you're keen for more community showcases I highly recommend checking out the 'I made this channel'. Specifically people post updates on their projects and how they're going along and I think that's really great to see exactly how things are changing all in the same thread which is super interesting.\u003C/p>\n\u003Cp>Next up, we have Kevin with a quick connect tutorial on AI web scraping API with flows. So I'm gonna hand over to him.\u003C/p>\n\u003Cp>Speaker 4: Hello there. I'm really excited about this tutorial. So on Directus TV, we already have a show called Quick Connect, which shows you how to integrate third party services with Directus using Directus Automate and Flows. And in the spirit of that show, today, I'm gonna show you how to integrate FireCrawl with Directus. Now here they say that they turn websites into LLM ready data, And what that means in practice is you can feed it a URL, provide some options if you want, and it will go and take a look at that web page and return some structured data for you like so.\u003C/p>\n\u003Cp>This is their scrape endpoint, which will take a single web page and scrape some data from it. They also have a couple of other endpoints, crawl and map, but today we're gonna use scrape. Now I've already logged into Firecrawl Cloud and generated an API key, which I'll copy for later. You can also self host Firecrawl, but for ease, I'm just gonna use their cloud product here. Now I have this directors project over here with a new empty collection called companies.\u003C/p>\n\u003Cp>In this collection, there are a few fields, URL, a name, a description, a mission, and a boolean, a true force value, is it open source. And our goal will be to provide the URL and then have FireCrawl automatically populate the rest with flows. So let's go ahead and create a new flow. So this is our automation builder if you've not seen it before. I'll call this one get company data, I guess.\u003C/p>\n\u003Cp>And we are going to use a manual trigger which will add a button to the side of collection and item pages. So we're going to say we'll run this on the company's collection. What else matters here? We're going to not require selection, so the button always works, and we're going to require confirmation which will pop up a modal, and in that modal we will just add a URL. We'll make it a string input and we'll make it full width, and I think that's all we need to do here.\u003C/p>\n\u003Cp>So just to see what happens here, if I go back to the, to the company's collection, we now see this button here, this manual flow, trigger. I click that. It pulls up the box, and we'll put in a URL and hit run flow. So, now, if we go back to our flow, we should immediately see that there is one log. And in here, there is a body and the URL is the value that we typed.\u003C/p>\n\u003Cp>Fantastic. Now we need to actually do something with it. So, let's go ahead and add a new operation here. And, honestly, fire crawl is pretty sick. You can just make one web request.\u003C/p>\n\u003Cp>Let's take a look at their docs. We're gonna use the llm extract endpoint here, and let's just take a look at the kind of construction of this API call. It's a post request to this URL. We're gonna pass in our our API key here as an authorization header, and then they give us this kind of JSON payload here. Here, it's telling it to go ahead and extract specifically these four fields, the company mission, does it support SSO, is it open source, and is it in Y Combinator?\u003C/p>\n\u003Cp>And it's saying you must go get all 4 of these. So let's actually just turn this straight into a flow request request URL operation. So we're gonna do a post request to this URL, post request to this URL. I'm gonna go and copy my API key again here, and at the end of this, I'll, I'll destroy the key. Authorization authorization, bearer API key, save, and then there's the request body.\u003C/p>\n\u003Cp>And, honestly, it contains a little more than we need but this contains everything we need so we'll just pop that in there. The only thing we wanna do, of course, is pass in the URL that we put in the box. So we'll replace this with trigger dot body dot URL. Fantastic. Let's save that and see what happens if we go over to content, press the button, and type in directors dot io.\u003C/p>\n\u003Cp>We see that's running. That's running. That's a good sign. It means it's going off and making the request, waiting for the request. And then we see there is a second log.\u003C/p>\n\u003Cp>And we get some data back. There was a 200, so it was successful. Inside of data, there is a property called data, and then there is this value called extract. Extract contains all of those custom keys we asked for, company mission, supports SSO, is open source, and is in YC. And then always when you scrape, you get this metadata object, title, description, language, Open Graph data, source URL, and so on.\u003C/p>\n\u003Cp>So really all we want to do here now is we want to take this data and create a new company from it. So let's add a new, let's create a new operation on the resolve path of that web request. Let's call it create data. We're gonna create something in the company's collection, we'll give it full access, and then we just need to provide a payload. So let's go ahead and do that.\u003C/p>\n\u003Cp>We have an object here, we have a name, we have a name, and we're gonna pass in the value of the last operation dotdata.data.metadata.title. Then I, for 1, am I'm just gonna copy this and edit it each time. So we have name, URL. So that's last.data.data.metadata.sourceURL. We could, of course, just take it from the trigger body URL, but this is properly formatted.\u003C/p>\n\u003Cp>You'll notice I typed in directus.io, but when it came back in the payload, it came back with the with the, with the protocol HTTPS and so on. So we have name. We have URL. We have a description. Now this one is also from the metadata Description.\u003C/p>\n\u003Cp>We have the mission. Now this was a custom piece of data we asked to be extracted. Company mission is what we called it. And, finally, we have open, open underscore source. Last data, data extract and then is underscore open underscore source and then remove that trailing comma.\u003C/p>\n\u003Cp>So I believe that's the name of all of the fields. We'll figure it out in a moment when when it inevitably doesn't work. We'll hit the button again, directors dot io and hit run flow. Once again that's going off to Firecrawl using their endpoint and there we see there we see it straight here. URL name, description, mission and the boolean is open source.\u003C/p>\n\u003Cp>Let's, let's try that once more. Let's go in here and say fire fire crawl dot dev run flow. So let's see. And in theory we should just give that a moment and there it is. So now you can go ahead and grab more data.\u003C/p>\n\u003Cp>Now, of course, if we take a look at this endpoint here, you can provide custom properties and it will try its best to get data out from that. They have a couple of other interesting things which I'll draw your attention to even if I don't think it works in this context. They have, attention to even if I don't think it works in this context. They have extracting without a schema. So this extract here was us creating a a schema.\u003C/p>\n\u003Cp>Right. You can give it just a text. You can give it a prompt. Extract the company mission from the page, but the thing I don't like about that is you're not explicitly saying what the name of the key is, so you don't necessarily know what it's going to be at the end. I like creating a schema personally.\u003C/p>\n\u003Cp>They do something else that's kind of interesting. If I take a look at where is it, I think it's in their API reference here inside of scrape. They have this interesting thing called actions. So you can get it to wait, to take a screenshot, to click, write text, press a key and scroll and the combination of clicking and writing text means you can get it to interact with your web page. You see it here, actions, wait 2 milliseconds.\u003C/p>\n\u003Cp>You could get it to, like, sign in to things perhaps, perform search terms. I think it's super interesting and then take screenshots, of course, and upload those to directors if you fancy. So there's a lot of flexibility in this. Having seen kind of how easy this API is, I think I'll go ahead and turn this into, an extension some point in the next few weeks which we can release as part of Directus AI. But, yeah, that's how to integrate FireCrawl with Directus using Directus Automate.\u003C/p>\n\u003Cp>Hope you found this interesting, and by all means, if you have questions just reach out. Alright. Over to Beth.\u003C/p>\n\u003Cp>Speaker 0: Welcome to The Reading List. Internally, we have a number of Slack channels where we share links from all around that we found educational and entertaining and we'd really like to share some of our favorites this month with you. First up, we have EIAIO games on scaling 1,000,000 checkboxes. This was a web experiment where every time anyone globally checks a box that change is reflected across everyone's browser and it goes in-depth into the scaling challenges of the unexpected popularity of the website leading to 650,000,000 checked boxes. Next, we have a recorded YouTube video from wasm.\u003C/p>\n\u003Cp>Io24 featuring Luke Wagner giving a talk on a stream of consciousness on the future of async in the component model. This is a great talk from one of the original designers of WebAssembly on how async will work in WASI 0.3. Next, we have introducing Netflix's key value data abstraction layer on the Netflix tech blog. This takes us through some of their global backend infrastructure design powering one of the most popular streaming platforms around and their use of multiple online distributed databases such as Apache Cassandra. Next up, we have an interesting read introducing the tool Cambria which is used to help you describe in a structured way how schemas change and why they change.\u003C/p>\n\u003Cp>This is from an independent research lab called Inc and Switch, definitely one for folks interested in the more academic side of things. The data visualization catalog provides a list of charts categorized by their data visualization functions or by what you want a chart to communicate to an audience. It's a really useful guide for selecting charts based on your analysis or communication needs. It starts with what you're trying to communicate and recommends which chart or tools to use. Lastly, a nice little tip from Vic instead of storing states as booleans, so like true or false, you could consider a date stamp so you can see when a state was updated with null meaning false and any date value meaning true.\u003C/p>\n\u003Cp>Those are just a few of the links that we shared internally this month. If you've got your own interesting links we would absolutely love to see them. We would recommend you share them within the discord server so you can see them and you never know they might even be in next month's changelog! We like to take a moment towards the end of each changelog to thank our contributors and sponsors who help make Directus as great as it can be. A huge thank you to Florian for dropping support for the old SendGrid transport option in favor of SMTP directly.\u003C/p>\n\u003Cp>Thank you to Shane for adding support for disabling terminal screen clearing on rebuild in watch mode. Thank you to Junhong for fixing SVG truncation issue in image interface preview, for fixing an issue that would cause custom role names to not be translated in the role navigation sidebar, for fixing WYSIWYG interface to be updated when interface options are changed via conditions, for improving behavior of the translations interface when setting use users language option, for ensuring data in sidebar is re fetched when switching pages while a sidebar pane is already opened, and for ensuring errors occurred within the card layout are always shown. Thank you to renovate for updating dependencies across multiple packages. Thank you to Joshua for fixing an issue that would cause log streaming to fail on directors installations that use a sub path in the URL. Thank you to for ensuring users are redirected to the intended page after login via LDAP.\u003C/p>\n\u003Cp>Thank you to CASE for adding the optional ignore rules option to schema apply CLI, and thank you to Anton for making the output types of SDK requests better readable in IDEs. Thank you again to each individual you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of September who financially contribute to Directus' development specifically a huge thank you to Clement that's dlxclem for sponsoring as our backer tier of $100 a month. The money we are given from our Github sponsors goes straight back to the community members who build tooling and extensions for the directors ecosystem. Thank you again for being part of that.\u003C/p>\n\u003Cp>Alright, that is the last of the segments that we have for this month. If you are still watching thank you so much for sticking around we appreciate you And if you've watched the whole thing we'd love to know which segments you particularly like. That helps us plan for the next few months and to show, what you'd like to see so do let us know any feedback about the change log. The next change log is November 12th at 3 pm the same time and I do hope that it's going to stay the same time in discord because we are changing from British summer time to the non British summer time which is Greenwich Mean Time So if you see a different, time, it'll still be 3 PM GMT BST. It's all gonna be there.\u003C/p>\n\u003Cp>It's fine. Yes, Kevin. Not quite connect. Weird presenter in my opinion. Anyway, thank you so much again for tuning in.\u003C/p>\n\u003Cp>Have a great rest of your day, and hopefully catch you for the next one. Bye, everyone.\u003C/p>","Alright. Hello, everyone. Hopefully, you can all hear me, and I am gonna take a pause and just check that that is the case. So if someone could let me know, that would be great. Oh, I was excited. Carmen's saying hello, and I'm still gonna wait. Loud and clear. Perfect. Thank you so much, Kevin. Welcome to October's version of the change log from Directus. If you're new here or if you've, joined us before, welcome. I hope you're having the most perfect day. I hope your day is not too hot, not too cold. It's like the crispest, best version of the day because that is what you deserve for joining us. Thank you for for being here. We have a great show for you planned. We've got some updates from Brian and myself from product and extensions, we've got Carmen with a docs update for what is upcoming and that's super exciting, we have Kevin with a quick connect tutorial. We've got the community showcase, and we've got a whole bunch of different things. I am joining from London. I would love to know, where you are all joining from. I can see that the chat is already busy. That is great. Please continue. We have team members in there answering all your questions. So, yeah, if you've got anything that you are thinking about, let us know based on anything we are saying. We also have the general chat in Discord for afterwards if it comes to you and you're like oh I should have said that feel free to keep the conversation moving there as well. Did anyone say where they're joining from so far? I see a lot of hellos. Oh, Netherlands, North Germany. Hello. Welcome. Welcome. Granada, Spain, Ukraine, Austria, Egypt, Sardinia, Nigeria. Amazing. Welcome, France too. Hello. Hello. Super happy for you all to be joining us. I am gonna hand over to you, Bryant, with some product updates for the first start of the show. So hope you enjoy them. Brian here for Directus, and I've got 2 quick updates for you. Version 11.1.1 dropped last week with a load of bug fixes, optimizations, and a few dependency updates. I just wanted to give a quick shout out to our engineering team and the community members who are on fire at improving the Directus experience for you, for me, and the entire Directus community. There is however one breaking change. The underlying SendGrid package we were using is no longer maintained. So rather than risk your security or some type of crazy exploit, we've removed it. Now if you're using SendGrid as your direct to email provider, you'll want to switch up your config to use SMTP instead of their API. For the full list of fixes and updates, check the release notes in the Directus repository. Now on to my favorite update, probably because I had a little hand in shipping these. There's no bias here. I'm super excited to announce Directus cloud templates. These are handcrafted Directus instances with data models, permissions, flows, all the niceties already built out for you. Now, whenever you spin up a new project for your organization or your client inside Directus Cloud, you can get to 80% done by clicking one button. There are currently 3 templates to choose from. Simple CMS, which is great for your next website build. It's configured with the dynamic page builder, blog posts, menus, and even dynamic forms. Your content editors are going to love this one. Next up, we have simple CRM, which is the perfect starting point for your own custom Salesforce or HubSpot. It includes the standard fare, like organizations and contacts, deals and activities, and a configurable pipeline. Last but not least, we have simple ecommerce, which showcases a small online apparel or t shirt shop build out. The data model includes products, orders, customers, and it even handles more complex scenarios like product variance, which account for all the color and size combinations automatically. So hop on to Directus Cloud, spin up an instance, check them out, and as always, send us your feedback because we'll be releasing more of these templates in the coming months. And back over to you, Beth. I'm going to demonstrate each of the new extensions in Directus Labs this month. As a reminder Directus Labs is our team's experimental org in GitHub which regularly publishes new extensions we think are cool. The Gantt chart layout displays items in a collection in a Gantt chart helping those of you who use Directus for project management and task management. When configuring the layout specify a label that you want displayed on each task, a start date and an end date, and optionally a dependency field which will draw dependency lines in a chart. You can specify the zoom in as granular as an hour and as broad as a year. You can download it now in the marketplace. A calculated fields interface is the most upvoted open feature request in the directors project and today we are releasing it as an extension. It allows you to write a formula and the value of the interface will be automatically computed and shown. It supports the full set of functions provided by formula. Js and the majority of JavaScript operators that work for numbers and strings. It also supports relational fields and we pass formulas to ensure they are only running allowed functions which is important for security. A couple of things that are important to note values here are only visible in the interface and not in API responses. We've had this extension in the works for a while, but just a couple of days ago, a community member, Judah Sullivan, released the Directus AutoGen Extension which you might also want to check out as it's similar Both are available in the marketplace The API metric panel can be used to display a value from an external API, for example, that could be the number of docker downloads or sales or followers on social media platforms As you can see here we are making a web request to get docker metrics. We could also provide custom headers or a request body if required. Then you specify the path of the value you want to display. It's a nice responsive panel that allows you to get an overview of your business. You can download this extension directly from GitHub or NPM. Lastly, one of our core team members, Tim, in his spare time released a pair of flow operations which allows authentication and permission checking. The first operation allows you to check whether the flow was triggered by a user with admin access, user access, or public access. The operation will return true if authenticated or else throw an error. The second operation allows you to select a collection and it will return true if a user has read permissions in that collection. You can check this out over on github and npm we hope you enjoy using all these extensions Gantt chart layout, calculated fields interface, the API metric panel and tims authentication and permission checks let's bring my camera back up and I'll see how you're doing. I brought my camera back up hopefully you can see me again. Yeah, as I said we are super excited for everything we've just announced. Out of the extensions we've just talked about or if there are any other extensions that you regularly use in the marketplace, now is a good time to let us know in the chat. I mean for me as someone who really really likes project management efficiency the Gantt chart layout is super exciting and Kevin has just put in the chat as well the extension link for you to check them out for yourself. Tim, I did see you. Brace look also same person, same super ability. We are very excited about the operations as well. So, yeah, if you have any, extensions that you think you're like, this has really changed the game for me, this has changed the way I use direct us, or if you're just like, this is cool and I'm excited to hear more about it, let us know in the chat, and we can have a chat about this right now. Kevin is saying that Florian's flexible editor interface is the one. Yes. I agree. That one is great too. And, yeah, as we said, shout out to you, Judah. I'm not sure if you are in the chat, but we were talking about this in Discord earlier, too. So do make sure to check out their contribution as well. Yeah. So those are the, four ones for the extensions this month. Every month, we aim to have more. And if you are looking at where, to go, the extensions link is the best place. We do also have the extensions channel in Discord too, and the director's extension field, actions from Atomic Media is also a great one. I'm gonna move us along to the next part of the changelog, but feel free to keep the conversation going, via the chats whilst we're there. So I'm handing over to Carmen with a docs preview, which is super exciting. So I will send over to her now. Hey, everyone. My name is Carmen. I'm a developer educator at Directus, and part of my role is documentation and that's what I'm going to be showing you today. We are about to launch a beta of our new documentation and I just wanna show you a little bit about what our motivations are, what we've done, and what's next. And, in order to do that, I'm gonna tell you a little bit about what three aspects of our documentation we're aiming to tackle. 1 is content, the other is structure, and finally, the platform. So let's talk about the content. Over the years, starting from a very minimal set of documentation that served our needs, not only have we gotten a lot of feedback and requests for new pieces of documentation, but we've also seen lots of our team, lots of hands touch that documentation. And over time there have been different voices, there have been different tones and we just wanted to completely rewrite that. So everything that you will see in the new documentation, whether it's been brought over or adapted or written from scratch, will have been touched not just by me but by other educators. Next is structure. And so what we've done is sort of split it into 2 areas. 1 is a reference manual where you're looking at the exact parts of the documentation that you need just so that you can use Directus. But there's also an implementation side of it. You're not just using Directus in isolation. So we are also bringing in a set of tutorials so that you can work with directives, for example, with a specific framework, with a specific use case, maybe with a specific SSO provider. What we're doing here is hoping that we can make this sort of separation bring a lot of clarity to our documentation. Finally, there's our platform. When we started out, we were using VitePress which fulfilled so many of our needs. It came with a template that we could use and when we hit those limitations, we would extend them, make those parts our own, and adapt them as needed. But, with the opportunity of rewriting our documentation for scratch, we also wanted to have a brand new platform. We are rewriting our documentation using Nuxt. And I just wanna give a little shout out to one of our engineers, Connor, who's been spearheading this effort in a magnificent way. And finally, let's be honest, maintaining an API reference all in markdown can be quite cumbersome when manually written. So what we've set out to do is to have these API references also be automatically generated from code. So cool. Those are the 3 parts that we're addressing with our new documentation. But what's next? As I mentioned earlier, later this month, we'll be launching the 1st beta of the documentation. And this is where y'all come in. I'd love to ask you to please look over them, give us feedback, and tell us what we can do to improve this documentation for when we launch towards the end of the year. The other thing that we're going to be doing as well is to really look over all of our existing tutorials and audit them and bring them over. That does not mean that our old documentation is going to hide them our way. We're not gonna be hiding that old documentation or our tutorials. We're just going to be systematically bringing them over, making sure that they are correct, relevant, that they work with our current version of Directus and making sure that those tutorials stay in lockstep with new releases and new documentation. So that's it for me. Thank you so much for listening and I'll see you later. Alright. As Kevin said in the chat, we are releasing that in the next couple of weeks. He's also put the link where you can find it. Super exciting. And I am also gonna be the 3rd person to say a massive big up to Connor and also a massive thank you to Carmen as well. We've now come to the my personal favorite part of the changelog which is the community showcase. Love seeing what everyone is building and how they are making directors their own And this month, we have a community showcase from David who is gonna be talking about the form builder project they're currently working on. Hi. I'm David from. We are small digital studio based in Montreal. We've been working with directors for the last 2 years. And today, I'm going to talk to you about a small form builder extension that we've built for Dericus and that we're going to open source soon, hopefully. So let's start. So, the main feature that our clients have been missing since we migrated away from WordPress has been the form builder. Not sure if you're familiar with gravity forms, which is one form, complex form builder that is labeled in their WordPress ecosystem, that allow end users to configure forms, with conditions, with advanced fields, with notification, even integrations with external systems. So all those portions are quite easy to build with Directus apart from the advanced form builder. We were able to build a basic form builder using native features from directives, but they were not as easy for a end user to configure. In creating a complex form builders with conditions and wizards like features, is quite a big endeavor. So that's why we chose to, we actually started looking into open source project that could help us. And that's where we came across a library called survey gs. Survey so basically, survey gs has 2 main comp 2 main components. One is called survey creator. The survey creator is what the end user use to create the form or survey. It's quite powerful. And the other important portion is form library, or should I say what libraries? Now form libraries, they basically take in the JSON coming from the survey creator to render a form. They have library for Angular, Vue. Js, React, vanilla JavaScript, and probably other frameworks that for oh, yeah, and backbone, if they're still user of backbones. But anyway, yeah. So the only when we found that we found that it was basically doing everything we needed from a foreign perspective. So the only thing left was to integrate with Directus. And that's where we created our first extension, actually, our first or should I say first public extension for Directus? So let me jump into that. I'll do a quick demo of what we've built. The main features that we wanted to implement were, well, of course, integrating the survey creator, the ability to save forms or the form data in any collection, and finally send notification to either internal users or external users after form was filled. So here, as you can see, we have our small form module. So I'll jump into contact us form. I'll start with the form builder portion. Here, we have the basic form, 2 columns, first name, last name, or email. We have a drop down with some choices, subject of the the form. In here, we have our first condition. So, for example, I have a condition here that say if the subject is product information, then we will display what specific product information are you looking for. If it shows customer support, then instead, it's going to be what's your issue. I want this I won't demo all the features of, sorry. Js. There's a lot of documentation. You can look it up on their website. But, yeah, it's fairly powerful from builder. Then afterwards, we have the actual integration with Directus. So if you I go into the configuration of the form. Let me hide that for now. So, yeah, what we do have is the schema that was generated by the form builder. Technically, you could edit the schema itself, but it's easier to use the form builder instead. Please note, though, that the form builder of Suri. Js does require a license. We we do have the configuration to input your license in the extension, so that's good. But just so you're aware, it does require a license from, Suri. Js to use a survey creator. Anyway, so what I was saying is here, we have the configuration. So we could we can see that, it's submitting data to form submission collection. You can choose any collection that you want. You can create a new one. You can have multiple forms submitting to the same collection. It's really depend on your requirements, basically. We also have notification templates. I'll show I'll explain how notification templates work afterwards. And did I forget anything? No. I think that's pretty much it. So, yeah, actually, let's jump in into notification template first. So if somebody submit or fill in that form, as I mentioned, you can configure 1 or more notification templates. So let's jump into it. Form templates use like just flows. You can use any fields that was part of the form as as the recipient. For example, if you want them to have more than 1, you can add other recipient. In this case, we're using the field work email. But you could also add an hard coded one for, suppose, someone on your team. The template is itself is pure HTML, but same thing. There's basic templating, so you can use, variables from the from the form. In this case, the contact us form. So let's try and submit 13. So I'm gonna go back to my form, contact us form. And I didn't build my preview. Here in this case, it's an XGS application. So it's a React component that we built that is basically reading the schema here and passing the schema to the to the sorry. Js library. And once you're done submitting the form, it's going to call a webhook from Dactors to save the data. So let's try that. So of course, we do have validation. So let me fill the form. We based in North America. So we want to chat about product information, customer support. Yes. I'm not sure if this form is going to actually send email. Yeah. This field is not required. So I don't not gonna fill it. I'm just gonna complete the form. Thanks. No problem. So if we go into our contact us entries, we can see my entry, all the fields that were filled filled in with the data that was passed. And if we look at our notifications that were generated, we can see here we do have the new notification, the email that it was sent to, the actual content of the email. So you have a and a status, so you know if it it was fully sent or not. It does link back to the entry if needed that generate that that generated that notification. And once the form is submitted, we can see in my email that I received the confirmation template. Yes. So yeah. So that's pretty much how the, extension work. If we look at our flows, there's a couple of flows that need to be configured, but it's not that complex. Most of the features are built in feature from directors or survey GS. So most of the extension is gluing together the the 2 great products, basically. We do have some configuration that you can pass to the survey JS extension. So, for example, if you want to show the designer tab, the JSON tab, depending on your users, you might not want them to be able to see the JSON. So first of all, you can disable that, save the settings. And if you go back to the actual form, you see I don't have access to the JSON editor here. So we made that we made sure that we could configure every settings from, survey survey creator directly from directors. So, hopefully, it's an extension that, some of you will find useful. We're hoping to release the extension in the next month. We just wanna make sure that it come with clear installation instruction. But, yeah, it was the main feature for us that was missing from Directus. Everything else has been great. We're really happy having migrating from WordPress to Directus. And with that last missing piece of the puzzle, we have we now have a complete toolkit to, finalize our projects. So thank you very much. Alright. Thank you so much to you, David, for taking, the time to take us through that. I'm super excited for it to become available hopefully soon. I think it will make a great addition and if you're keen for more community showcases I highly recommend checking out the 'I made this channel'. Specifically people post updates on their projects and how they're going along and I think that's really great to see exactly how things are changing all in the same thread which is super interesting. Next up, we have Kevin with a quick connect tutorial on AI web scraping API with flows. So I'm gonna hand over to him. Hello there. I'm really excited about this tutorial. So on Directus TV, we already have a show called Quick Connect, which shows you how to integrate third party services with Directus using Directus Automate and Flows. And in the spirit of that show, today, I'm gonna show you how to integrate FireCrawl with Directus. Now here they say that they turn websites into LLM ready data, And what that means in practice is you can feed it a URL, provide some options if you want, and it will go and take a look at that web page and return some structured data for you like so. This is their scrape endpoint, which will take a single web page and scrape some data from it. They also have a couple of other endpoints, crawl and map, but today we're gonna use scrape. Now I've already logged into Firecrawl Cloud and generated an API key, which I'll copy for later. You can also self host Firecrawl, but for ease, I'm just gonna use their cloud product here. Now I have this directors project over here with a new empty collection called companies. In this collection, there are a few fields, URL, a name, a description, a mission, and a boolean, a true force value, is it open source. And our goal will be to provide the URL and then have FireCrawl automatically populate the rest with flows. So let's go ahead and create a new flow. So this is our automation builder if you've not seen it before. I'll call this one get company data, I guess. And we are going to use a manual trigger which will add a button to the side of collection and item pages. So we're going to say we'll run this on the company's collection. What else matters here? We're going to not require selection, so the button always works, and we're going to require confirmation which will pop up a modal, and in that modal we will just add a URL. We'll make it a string input and we'll make it full width, and I think that's all we need to do here. So just to see what happens here, if I go back to the, to the company's collection, we now see this button here, this manual flow, trigger. I click that. It pulls up the box, and we'll put in a URL and hit run flow. So, now, if we go back to our flow, we should immediately see that there is one log. And in here, there is a body and the URL is the value that we typed. Fantastic. Now we need to actually do something with it. So, let's go ahead and add a new operation here. And, honestly, fire crawl is pretty sick. You can just make one web request. Let's take a look at their docs. We're gonna use the llm extract endpoint here, and let's just take a look at the kind of construction of this API call. It's a post request to this URL. We're gonna pass in our our API key here as an authorization header, and then they give us this kind of JSON payload here. Here, it's telling it to go ahead and extract specifically these four fields, the company mission, does it support SSO, is it open source, and is it in Y Combinator? And it's saying you must go get all 4 of these. So let's actually just turn this straight into a flow request request URL operation. So we're gonna do a post request to this URL, post request to this URL. I'm gonna go and copy my API key again here, and at the end of this, I'll, I'll destroy the key. Authorization authorization, bearer API key, save, and then there's the request body. And, honestly, it contains a little more than we need but this contains everything we need so we'll just pop that in there. The only thing we wanna do, of course, is pass in the URL that we put in the box. So we'll replace this with trigger dot body dot URL. Fantastic. Let's save that and see what happens if we go over to content, press the button, and type in directors dot io. We see that's running. That's running. That's a good sign. It means it's going off and making the request, waiting for the request. And then we see there is a second log. And we get some data back. There was a 200, so it was successful. Inside of data, there is a property called data, and then there is this value called extract. Extract contains all of those custom keys we asked for, company mission, supports SSO, is open source, and is in YC. And then always when you scrape, you get this metadata object, title, description, language, Open Graph data, source URL, and so on. So really all we want to do here now is we want to take this data and create a new company from it. So let's add a new, let's create a new operation on the resolve path of that web request. Let's call it create data. We're gonna create something in the company's collection, we'll give it full access, and then we just need to provide a payload. So let's go ahead and do that. We have an object here, we have a name, we have a name, and we're gonna pass in the value of the last operation dotdata.data.metadata.title. Then I, for 1, am I'm just gonna copy this and edit it each time. So we have name, URL. So that's last.data.data.metadata.sourceURL. We could, of course, just take it from the trigger body URL, but this is properly formatted. You'll notice I typed in directus.io, but when it came back in the payload, it came back with the with the, with the protocol HTTPS and so on. So we have name. We have URL. We have a description. Now this one is also from the metadata Description. We have the mission. Now this was a custom piece of data we asked to be extracted. Company mission is what we called it. And, finally, we have open, open underscore source. Last data, data extract and then is underscore open underscore source and then remove that trailing comma. So I believe that's the name of all of the fields. We'll figure it out in a moment when when it inevitably doesn't work. We'll hit the button again, directors dot io and hit run flow. Once again that's going off to Firecrawl using their endpoint and there we see there we see it straight here. URL name, description, mission and the boolean is open source. Let's, let's try that once more. Let's go in here and say fire fire crawl dot dev run flow. So let's see. And in theory we should just give that a moment and there it is. So now you can go ahead and grab more data. Now, of course, if we take a look at this endpoint here, you can provide custom properties and it will try its best to get data out from that. They have a couple of other interesting things which I'll draw your attention to even if I don't think it works in this context. They have, attention to even if I don't think it works in this context. They have extracting without a schema. So this extract here was us creating a a schema. Right. You can give it just a text. You can give it a prompt. Extract the company mission from the page, but the thing I don't like about that is you're not explicitly saying what the name of the key is, so you don't necessarily know what it's going to be at the end. I like creating a schema personally. They do something else that's kind of interesting. If I take a look at where is it, I think it's in their API reference here inside of scrape. They have this interesting thing called actions. So you can get it to wait, to take a screenshot, to click, write text, press a key and scroll and the combination of clicking and writing text means you can get it to interact with your web page. You see it here, actions, wait 2 milliseconds. You could get it to, like, sign in to things perhaps, perform search terms. I think it's super interesting and then take screenshots, of course, and upload those to directors if you fancy. So there's a lot of flexibility in this. Having seen kind of how easy this API is, I think I'll go ahead and turn this into, an extension some point in the next few weeks which we can release as part of Directus AI. But, yeah, that's how to integrate FireCrawl with Directus using Directus Automate. Hope you found this interesting, and by all means, if you have questions just reach out. Alright. Over to Beth. Welcome to The Reading List. Internally, we have a number of Slack channels where we share links from all around that we found educational and entertaining and we'd really like to share some of our favorites this month with you. First up, we have EIAIO games on scaling 1,000,000 checkboxes. This was a web experiment where every time anyone globally checks a box that change is reflected across everyone's browser and it goes in-depth into the scaling challenges of the unexpected popularity of the website leading to 650,000,000 checked boxes. Next, we have a recorded YouTube video from wasm. Io24 featuring Luke Wagner giving a talk on a stream of consciousness on the future of async in the component model. This is a great talk from one of the original designers of WebAssembly on how async will work in WASI 0.3. Next, we have introducing Netflix's key value data abstraction layer on the Netflix tech blog. This takes us through some of their global backend infrastructure design powering one of the most popular streaming platforms around and their use of multiple online distributed databases such as Apache Cassandra. Next up, we have an interesting read introducing the tool Cambria which is used to help you describe in a structured way how schemas change and why they change. This is from an independent research lab called Inc and Switch, definitely one for folks interested in the more academic side of things. The data visualization catalog provides a list of charts categorized by their data visualization functions or by what you want a chart to communicate to an audience. It's a really useful guide for selecting charts based on your analysis or communication needs. It starts with what you're trying to communicate and recommends which chart or tools to use. Lastly, a nice little tip from Vic instead of storing states as booleans, so like true or false, you could consider a date stamp so you can see when a state was updated with null meaning false and any date value meaning true. Those are just a few of the links that we shared internally this month. If you've got your own interesting links we would absolutely love to see them. We would recommend you share them within the discord server so you can see them and you never know they might even be in next month's changelog! We like to take a moment towards the end of each changelog to thank our contributors and sponsors who help make Directus as great as it can be. A huge thank you to Florian for dropping support for the old SendGrid transport option in favor of SMTP directly. Thank you to Shane for adding support for disabling terminal screen clearing on rebuild in watch mode. Thank you to Junhong for fixing SVG truncation issue in image interface preview, for fixing an issue that would cause custom role names to not be translated in the role navigation sidebar, for fixing WYSIWYG interface to be updated when interface options are changed via conditions, for improving behavior of the translations interface when setting use users language option, for ensuring data in sidebar is re fetched when switching pages while a sidebar pane is already opened, and for ensuring errors occurred within the card layout are always shown. Thank you to renovate for updating dependencies across multiple packages. Thank you to Joshua for fixing an issue that would cause log streaming to fail on directors installations that use a sub path in the URL. Thank you to for ensuring users are redirected to the intended page after login via LDAP. Thank you to CASE for adding the optional ignore rules option to schema apply CLI, and thank you to Anton for making the output types of SDK requests better readable in IDEs. Thank you again to each individual you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of September who financially contribute to Directus' development specifically a huge thank you to Clement that's dlxclem for sponsoring as our backer tier of $100 a month. The money we are given from our Github sponsors goes straight back to the community members who build tooling and extensions for the directors ecosystem. Thank you again for being part of that. Alright, that is the last of the segments that we have for this month. If you are still watching thank you so much for sticking around we appreciate you And if you've watched the whole thing we'd love to know which segments you particularly like. That helps us plan for the next few months and to show, what you'd like to see so do let us know any feedback about the change log. The next change log is November 12th at 3 pm the same time and I do hope that it's going to stay the same time in discord because we are changing from British summer time to the non British summer time which is Greenwich Mean Time So if you see a different, time, it'll still be 3 PM GMT BST. It's all gonna be there. It's fine. Yes, Kevin. Not quite connect. Weird presenter in my opinion. Anyway, thank you so much again for tuning in. Have a great rest of your day, and hopefully catch you for the next one. Bye, everyone.","\u003Cp>Join us for The Changelog, taking you through the month&rsquo;s Directus updates including product updates, new content and community contribution highlights. This month's show includes a community showcase of a form builder from David, Carmen taking us through a docs preview and Kevin with a tutorial on AI web scraping API with flows.\u003C/p>","e5fcb8f2-0efc-45bd-a936-5b6133c1c0ce",[210,211,212,213],"8735bb07-70ba-4859-8691-f8f73fbbd4b6","01efa3c2-0d0a-4cfa-9977-98491f1fb5e4","a29b02f4-9587-4342-83cc-4e81821a0286","dd8ab2f5-3e33-4655-9469-411840a590d4",[],{"id":152,"number":153,"show":122,"year":154,"episodes":216},[156,157,158,159,160],{"id":159,"slug":218,"vimeo_id":219,"description":220,"tile":221,"length":222,"resources":8,"people":8,"episode_number":223,"published":224,"title":225,"video_transcript_html":226,"video_transcript_text":227,"content":8,"seo":228,"status":130,"episode_people":229,"recommendations":234,"season":235},"4-november-2024","1030913964","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes a community showcase of a note taking system from Josh, Carmen taking you the first episode of Sharp Focus, Kevin with the new guest Author program and more...","9bde0965-1d3e-4d2e-b5c1-c3e11711200b",45,4,"2024-11-18","November 2024","\u003Cp>Speaker 0: All right. Hello. Hello everyone. Hopefully you can all hear me and if you can I would love to know where you are joining us from today? 1, to say that\u003C/p>\u003Cp>Speaker 1: you can hear me and, 2, because I'm nosy and\u003C/p>\u003Cp>Speaker 0: I wanna know where everyone is. Last time everyone was all over and it was really great to hear. Personally, I am joining from London where we had the first snow of the fall this morning. It was quite rainy snow like it wasn't magical magical but it counted and that's what matters so that is where I am from. Excellent, Carmen, thank\u003C/p>\u003Cp>Speaker 1: you so much for telling me you can hear me, I appreciate it. Vienna, Austria, we've got Sweden, USA, Finland, amazing, welcome. I hope you're all having such an amazing day. Devon, Germany, very cool, Netherlands as well. We have some very fun and also educational, material coming up for you for the rest of this show.\u003C/p>\u003Cp>If you've got any questions throughout, we've got\u003C/p>\u003Cp>Speaker 0: the chat open, and there's a couple of people from our team in it as well. So please do let us know if you have any questions. But we are starting off, the November change log with a product update from Bryant. So I'm gonna send you over to him.\u003C/p>\u003Cp>Speaker 2: Thanks, Beth. Bryant here for Directus, and here's a quick rundown of the core changes that have happened since the last changelog. Version 11.2.0 brought TUS resumable file upload protocol support to the Supabase, Azure, Cloudinary, and GCS storage adapters. And we already had tough support for the AWS s three compatible and local asset storage adapters. Which basically means, you are now fully covered when uploading large files, like videos to Directus.\u003C/p>\u003Cp>In version 11 dot 1 dot 2, we introduced a migration for Directus comments. There's now a dedicated directus underscore comments collection, which will make it much much easier for you to use comments in your front end projects via the API. We previously stored comments in the directus underscore activity collection, which admittedly was a bit messy because of all the other activity logs we stored alongside those comments. So this welcome change brings new API endpoints for comments, but the existing endpoints are still 100% totally functional. One note though, primary keys are now UUIDs instead of integers.\u003C/p>\u003Cp>So that could impact any custom type checking implementations you set up. The Directus SDK's internal comment endpoints have also been updated to reflect this change. And I know you're all for avoiding errors, so just ensure your Directus version is compatible with the latest SDK when you're using those comment functions. And there's just one more change with version 11.1.2. We've made some improvements to content versioning.\u003C/p>\u003Cp>Internally, we stored every change to a content version separately in the directus_revisions collection. And then we merge those together when promoting a version. In this release, we've added a new delta field to directus_versions collection, and that combines all the revisions into a single field. So all that to say, this means you'll be able to prune your revisions, which are the individual changes to a piece of content, without losing your versions. And with that, back over to you, Beth.\u003C/p>\u003Cp>Speaker 0: I'm going to demonstrate each of the new extensions in Director's Labs this month. As a reminder, Director's Labs is our team's experimental organization on GitHub. Typically, these extensions aren't maintained the same way that the main directors project is, but we have now committed to maintaining 4 of them. They are the spreadsheet layout, the Gantt chart layout, the Command Palette module, and the calculated fields bundle. You can see all these extensions, including which extensions are maintained, over on the extensions repo.\u003C/p>\u003Cp>Onto the demos. Directors AI is a collection of extensions that allows you to leverage the best AI tools from within Directors Automate. Today, we have 2 announcements, a brand new extension and an improvement. Let's start with a brand new extension, the AI web scraper. This allows you to scrape web pages and receive structured data back.\u003C/p>\u003Cp>We're using FireCrawl to perform the scraping, so you'll need an API key from them. You put a web page or a link to a PDF. Here, we're using directors. Io. If we go into the actions before scraping, here you can get the scraper to perform actions on the web page and add additional metadata about the action.\u003C/p>\u003Cp>For example, which element to click on or how far to scroll. For the data to extract, here's where you tell it what data you wanted to extract, and it will use AI to extract it. In the property description, we're going to put permission, string as data type, and we're going to enable making it a requirement. Optionally, there are additional formats, so you can also specify how you want the pages content to be presented back to you. They've also just had their launch week and we've implemented their brand new features such as the country, language, and mobile options.\u003C/p>\u003Cp>The other announcement is an improvement to the AI writer. The biggest change here is that before you could only use OpenAI's models and now we're extending the option to use multiple AI providers such as Anthropic, as well as different AI models. Other than that, everything else works as it did before, and this expansion was done thanks to an issue that was opened on the Directors Labs Extensions repo. So please do keep bringing your feedback for these. That's what's new for Directors AI We often hear from people that they love Directors insights, but want more ways to visualise their data.\u003C/p>\u003Cp>So we've added 4 new panels, which you can install now via the marketplace. 1st, we have the tree map chart. Select a collection, optionally a filter, which field you want to use for the labels and the value, and any aggregation you would like to perform. For example, here we are summing the value of all deals per company, so each company has its own cell at the size of all values related to that company. Next, we have funnel chart.\u003C/p>\u003Cp>Now, the funnel chart works exactly the same way, but visualises data differently. So depending on your needs might be more appropriate for you. For example, here we have a typical sales funnel. Funnel charts excel when people, or entities, follow a linear path and you want to see how many convert between stages. Next is the scatterplot.\u003C/p>\u003Cp>If you've never seen one before, this is a very typical two axis chart where values are plotted as dots. You can optionally add axis labels and hover over any of the dots to see the values. Finally, we have the timeline chart. This is a sibling to the Gantt chart layout that we recently released last month. We have less space to work with in a panel, so it's a simplified version, but it can be really powerful to include for project management.\u003C/p>\u003Cp>This relies on having 2 date fields, a start and an end, and then a label for the axes on the left and some display text for the item itself. We hope you enjoy our new panels. We certainly think that people are going to get a lot of use out of them. Extension authors often want to extend the functionality of our built in interfaces, And a few months ago, we released the WYSIWYG and block editor as boilerplates to build on top of. Today, we are releasing our first layout boilerplate, the table layout.\u003C/p>\u003Cp>This was already the basis for our spreadsheet layout extension, and now you can build on top of it and extend it too. You can find this in our Director's Labs extension repo, And we hope that this supercharges your extension building.\u003C/p>\u003Cp>Speaker 3: Hello there. Today, we are announcing our brand new and improved guest author program. The directors community is filled with people who use directors in so many different ways, so many different languages, frameworks, use cases, and this program is all about bringing those experiences to the tutorial section in our new documentation to help new directors users and existing directors users be as successful as possible. So we invite you to apply to be part of our brand new guest author program. Previously, our guest author program worked where you submitted your own ideas.\u003C/p>\u003Cp>In this program, once accepted, we have identified a huge number of tutorials that we think would be hugely impact for our users, and we invite you to write them and get paid doing it. We will support you through that whole process reviewing content and making sure what you create, is the best it can possibly be. So if you are an experienced technical writer and you know how to use directors, this program is for you. It's about educating others about how to be successful and make the most of directors. We are going to open applications a few times a year.\u003C/p>\u003Cp>This first open application starts today, and it will be open through the end of November, to kick off shortly after. So we really look forward to seeing your applications and the amazing tutorials that you can write to help others.\u003C/p>\u003Cp>Speaker 0: Alright. Hopefully, I am back. I'm super excited about those announcements. I did put in the chat the links for applications to become a guest author and also the Derick's Labs extensions, URL as well, so do check those out if you haven't already seen them. I'm super interested in hearing about what you are excited about from those announcements or if you're using any extensions.\u003C/p>\u003Cp>We've got a couple\u003C/p>\u003Cp>Speaker 1: of minutes in the chat to, have a talk with you about them So if you have seen any that you're like, this is gonna be particularly useful to me, we'd love some instant feedback on what is getting you excited, what you might be using them for. I know and I think I said this last month to you about the Gantt chart, but anything project management, super exciting. Like, just to be able to see a timeline, like a crisp timeline is super exciting for me. Also, the funnel, we love to see it. So, yeah, if you do have any thoughts, keep them coming in the chat whilst we are talking through them.\u003C/p>\u003Cp>Speaker 0: And if not, we have the Discord throughout the month, if you've got any questions about anything at all. I'm gonna\u003C/p>\u003Cp>Speaker 1: give it a couple more seconds. If you are typing, type quickly, before I move us on.\u003C/p>\u003Cp>Speaker 0: But, yeah, just, as we said in there, lots of feedback coming in through, which is super helpful in working out the directions as well. So that is all good, and we're excited to keep things coming and keep telling you about them in the change log. Alright. I am going to Ben says, I'd really like some more documentation on using real time stuff in Next. Js.\u003C/p>\u003Cp>Carmen, I believe you are in the chat\u003C/p>\u003Cp>Speaker 1: as well, so that, hopefully, you are able to give some insight on what is upcoming. Josh says I\u003C/p>\u003Cp>Speaker 0: found your software, and I'm using cool. Excellent. Very excited to see it. So I'm gonna move us on to the next segment, which is slightly cringey. So you have been warned.\u003C/p>\u003Cp>We had a lot of fun putting this together, and it's time for a completely new segment in\u003C/p>\u003Cp>Speaker 1: the change log. We do try and keep things, new and fresh, so we haven't done this before. This is a segment called Automate My Life, and we really hope you enjoy it.\u003C/p>\u003Cp>Speaker 0: Hello, and welcome to Automate My Life. In this show, we help regular people using Directus.\u003C/p>\u003Cp>Speaker 3: And today, we are in sunny London with our 1st person in need, Sean. He has lots of problems. We can't help with most of them, but we certainly can help with 1. Over to Sean. So I'm here with Sean who has called in the Automate My Life team with a problem.\u003C/p>\u003Cp>Sean, what can we help you with? Hi, Keir. Thanks for coming. I have a problem. Tell me more.\u003C/p>\u003Cp>Look at this plant. What do you notice about it? Sean, this plant is dead. That is the problem. Okay.\u003C/p>\u003Cp>Yep. See, I have plants and they are not dead. But then no matter what I do, they become dead. Despite your best effort. Despite my best and sometimes your mediocre efforts as well.\u003C/p>\u003Cp>Okay. I understand. Well, I think this is something we might be able to help with over in the workshop. Marvelous. Automate my life, director's team.\u003C/p>\u003Cp>Over to Beth.\u003C/p>\u003Cp>Speaker 0: Okay, folks. You've heard what Sean's problem is. We've brought you here as the best of the best to work out a solution for Sean. The future of his plants relies on you. What have you got?\u003C/p>\u003Cp>Speaker 4: Hey, Sean. Welcome to the Directus workshopping team. We're all about automating our lives every day. I have a similar problem. My wife my partner, has a pepper garden.\u003C/p>\u003Cp>She's an avid gardener. She loves to garden. This year, she actually picked up a little pH temperature monitor or soil tester, to give you the soil quality and quantity and make sure that she could amend the soil properly for those kinds of things. But as I'm thinking about this now, I'd actually like to work with her, and we'll get a I I think next year, I'm actually going to do this particular project. But in the meantime, we'll talk about some of the ways we could solve this problem.\u003C/p>\u003Cp>There are both DIY options and aftermarket options. I think I'll opt for the DIY, and that will be using something along the lines of an e s ESP 32 Wi Fi Sensor. There's a nice Directus blog that kind of goes through a use case for this, but we're gonna talk a little bit more in detail about some specific sensors and capabilities that we'll need to do for this. So there's an ESP 32. This has built in Wi Fi.\u003C/p>\u003Cp>The ability to integrate that with your sensors and plug that into your sensors, so we can collect data, soil temp moisture contents, and, temperatures. So the key thing is to making sure that your plants grow successfully. Now, in order to make this all work together to get you alerts and notifications, I'm gonna hand you off to my main automation guru, mister Bryant Gillespie.\u003C/p>\u003Cp>Speaker 2: Sorry, Jonathan. I, had these thinking glasses on to consider this problem. I just want to say this is an amazing use case for Directus Flows. We are going to be able to send automated notifications whenever these values are out of bounds. So here's what I'm thinking.\u003C/p>\u003Cp>Whenever a new item is created in the logging collection we trigger a flow. That flow does some magic and it will run some conditional operations to determine whether those values for moisture, for pH, for temperature are within the bounds that we set. If they are within those bounds, nothing happens. You're a okay Sean. As soon as those values step out of bounds like they're on the court, boom, you get a message via SMS through the Twilio API.\u003C/p>\u003Cp>And that's a wrap. Now to kick it over to my main man, AvDV, our head of insights.\u003C/p>\u003Cp>Speaker 5: Hey, Sean. If you're anything like me and you've got a lot of plants, I can imagine all these sensors are gonna be bringing in a ton of data into your into your director's project. So what better way to use insights or our dashboards to build up, targeted, insights which give you a summary of all the information in one page. We have, time series charts that you can start to track the pH, the moisture and the temperature over time. And with built in filters as well, you can you can filter by room, by particular plant, or even by the season if you want to track, the growth or the moisture over the seasons.\u003C/p>\u003Cp>There's a ton more use cases that we could build in, but those are just good. Some 3 quick summaries of what you could build with the Director's insights.\u003C/p>\u003Cp>Speaker 0: Wow. This all sounds great. I'm gonna leave you in the workshop to make this real. So Sean, we built you a soil monitor. There's sensors in here that every hour monitor the status of the planet.\u003C/p>\u003Cp>And if it's in need, we'll let you know via text messages exactly what's wrong.\u003C/p>\u003Cp>Speaker 3: Wow. That's amazing. I'll never kill again. Thanks, directors. Thank you so much.\u003C/p>\u003Cp>What a wonderful first episode of Automate My Life. Thank you for taking part. If you have an idea for a future episode, you can probably keep it to yourself. This is probably a one and done. Thank you, and bye for now.\u003C/p>\u003Cp>And that's something we can help you with. I certainly hope so.\u003C/p>\u003Cp>Speaker 6: I think we can handle discus team.\u003C/p>\u003Cp>Speaker 3: What's the new company again? Director. Director.\u003C/p>\u003Cp>Speaker 1: Wow. That was quite something, I hope you enjoyed. And I'm also very glad that the bloopers reel did in fact stay in because it was a lot of fun to record. There were some great ones. So, next up is sorry.\u003C/p>\u003Cp>I've gotta compose myself. It was so cringey. I could still feel it, like, in my cheeks. So next up, we have what I always say is my favorite part\u003C/p>\u003Cp>Speaker 0: of the change log, and that is the community showcase. This month, we have Josh talking through the note taking system he built, so I'm gonna send you over to him.\u003C/p>\u003Cp>Speaker 6: Hi there. I'm Joshua Behmendurfer, a software developer and IT manager at a Christian nonprofit. I have a tendency to build odd solutions like this one to solve mildly frustrating problems. Today, I'm showing off an offline first portable note taking system that integrates with Directus. It uses the Tiletec's awesome hackberry pi 0 for the hardware.\u003C/p>\u003Cp>This little doohickey with a physical keyboard, And Directus to store and retrieve data. Here's how it works. 1st, in Directus, I'm going to create a new collection called to do with a manual primary key which we'll set to the current date from the note taking system. Then we'll add a single simple markdown field that we'll use for our task list. And you can do more complicated stuff.\u003C/p>\u003Cp>I'm just going with the markdown field. Then I'm going to add a, assign to field that references a contact so that I can show how, relationships work with the note taking system. And then we should be good to go. Alright. Now let's take a look at how to create and edit notes on the device.\u003C/p>\u003Cp>I'm gonna use my Android phone here because it's pretty hard to take a recording of the Hackberry without my fingers getting in the way. I've got my editor open with a new text file. This file contains commands that interface with the Directus API. Let's skip the current date so that we can refer to it when creating today's to do and then get the ID of my contact entry so that the to do could be assigned to me. I'm using the Directus search and field parameters to find just my contact ID.\u003C/p>\u003Cp>Alright. Now we've got that ID. Let's make a view to do for today. We could use the, dollar sign to refer to the output of previous commands. Like, you were setting the ID to the current date.\u003C/p>\u003Cp>And then I'm going to assign that contact to my that, to do to myself. We're on it. Now let's add some tasks for some things I need to do today. Well, let's see. We could take out the trash.\u003C/p>\u003Cp>I should probably do that. We should do the laundry. That definitely needs to get done. What else? I should probably record this video.\u003C/p>\u003Cp>Alright. And then when I hit control r, these changes sync to Directus. And then they're also saved locally in this file for offline editing. I can make changes and they will get synced to my Directus instance. So let's take a look at what has been saved.\u003C/p>\u003Cp>As you can see, the tasks, assignment, and date are all here. I built this system because I forget things pretty easily and I'm always remembering them at the wrong time. So, to try and capture those fleeting memories, I tried to take notes on the go. Especially at Berk when I'm needing to walk between different people's offices and just catch up with all sorts of things people are saying while I'm, away from my desk. So, I started out with all sorts of notebooks and even designed several variations of reusable note cards, but I could never find the right note card at the right time and digitizing them constantly to make them searchable turned out to be quite a chore.\u003C/p>\u003Cp>To make the switch to digital notes, I started with Obsidian. It worked pretty well, but I never had the flexibility in data structures and the querying capabilities that I wanted. The text editing experience and syncing proved finicky at times as well. It was close to what I wanted, but not quite right. I solved the structured data organization problem using Directus.\u003C/p>\u003Cp>The Data Studio makes it a breeze to set up all the collections and fields I need to organize my data the way I want to and it backs it with the full power of a SQLite database. Anything it doesn't support out of the box, I'm a software developer, I can build on to it. But, I had two main issues with the vanilla Directus setup. Number 1, it doesn't work offline and I was always forgetting to hit the save button in my notes And trying to switch between other apps on my phone and direct us while in the middle of a bunch of other things just put too much friction in the note taking process. So, when I saw the Hackberry Pi come up for sale, it seemed like the perfect crazy gadget for taking notes.\u003C/p>\u003Cp>My, fat thumbs make typing on a touchscreen a pain, so a device with a physical keyboard was perfect. And, it's still small enough to fit in my shirt pocket. I snagged one once they were in stock and while waiting for it to ship from Germany I threw together some simple software to communicate with Directus. This system uses the micro text editor, which is a convenient, easy to use command line text editor that also happens to be extensible with Lua. And I combine it with an indentation based syntax for encoding JSON as the small scripts do things up to direct us.\u003C/p>\u003Cp>It's not pretty and it does have all sorts of interesting ways of crashing but it works very well for my use case. When I need to take notes, I press the hotkey on the Hackberry, the note I want to edit comes up, then I just type and sync to Directus once I'm back online. I doubt this exact system will be of much use for anyone else but it just goes to show the creative things you can do with Directus to Scratch, personal or work related itches. There's all sorts of wonderful ways you can wire things up. Thank you for your time.\u003C/p>\u003Cp>Goodbye.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you so much to you, Joshua, for taking the time to, record the video and share\u003C/p>\u003Cp>Speaker 1: with us as we always love to see what people are doing with directors. I see\u003C/p>\u003Cp>Speaker 0: that a couple of people have got a video blur, we are on it and we're trying to fix it and see what\u003C/p>\u003Cp>Speaker 1: we can do. Hopefully it comes back to normal. I don't think it's been that way the whole time so fingers crossed it's just\u003C/p>\u003Cp>Speaker 0: a bit of a rough patch and it will be fine again going forward. I'm gonna send you over to Carmen who has the first video of Sharp Focus and I'm gonna allow her to talk through exactly what that series is and the rest of the series is also out now on director's TV. So I'll find the link for you in the chat as well. Alright. Over to Carmen.\u003C/p>\u003Cp>Speaker 7: Hello, everybody, and welcome to Sharp Focus, the show where we shine a lens on how Directus helps you transform your images and truly make them shine. My name is Carmen, and I will be your guide over the next 5 episodes where we'll learn how images can be transformed, how they work under the hood, how they can be manipulated, how they can be resized to be more performant, how you can use advanced transformations, and how you can use presets to take all of the above and apply it in one fell swoop. Now as it turns out, Directus offers a bevy of options for working with images out of the box powered by the sharp API from Node JS. And we're going to be taking a look at how to do that in a way that's going to be super fun and super approachable. So won't you join me in grabbing our cameras and let's dive right into finding out how Directus works with images.\u003C/p>\u003Cp>So here we are in my very own Directus project running locally dedicated to my photography. Right now, we are in the file library module where you can see that I have a folder over here on the left sidebar. This folder contains photos from my latest trip to my home country Chile. Now, I'm going to use Directus to work with these images for different applications, thumbnails, that sort of thing. But, as you can see, a lot of these images are of varying sizes and qualities.\u003C/p>\u003Cp>But that's okay. We can use to transform these images to create some consistency and even add some cool effects, which we'll be doing in this series. But first, let's take a little look at what makes these images tick. Now I've already uploaded these to Directus, so this gives me a couple of options to work with them. If I click on one of the images, for example, the photo of my trip to the national park, Torres del Paine, we will see that we can do things like change the title, add a description, some tags, location, if we wish, some focal points, more on that later, and also have access to its asset ID.\u003C/p>\u003Cp>But that's not all. We can even edit that image. Now we're not going to be doing that in this series, except for using it to create focal points. But again, more on that later. Now, if I want to access that image from say my browser, I can take that asset ID and navigate to my instances URL/assets/the ID of that image, which is fantastic.\u003C/p>\u003Cp>But one thing to bear in mind, I'm logged into Directus as an admin. But if I wanted to access this image from an application, I would need to assign that application the correct permissions, which we can do here in Directus. When I navigate to the settings module and then go over to access policies, we can see that I already have some permissions and roles set for administrators, which is my logged in user. But I wanna make these images fully public. So what I can do is click here on public and under permissions, click on add collection and select the Directus Files system collection.\u003C/p>\u003Cp>I will be able to assign different permissions for folks accessing that from anywhere. But I only want to give folks the ability to read. So we'll click here on read access and then assign all access. The last thing to do is to save that permission. Fantastic.\u003C/p>\u003Cp>Now I can access this image from a browser, from an application, from anywhere. So let's go back and look at that image. Now you remember that these images are of different sizes and qualities. So in order to create some consistencies, we're going to be applying different image transformations, but also giving them a little bit of pizzazz with some advanced transformations. It's gonna be super cool.\u003C/p>\u003Cp>Before we wrap up this video, I'd like to show you a couple of the types of transformations we can do. In the next video, we'll be looking at image manipulation where we can use query parameters like width, like height, and fit to manipulate our image and in this case make it a consistent 300 by 300 pixels. But that's not all. In our 3rd episode, we'll be looking at how we can manipulate the size and performance of our images. For example, here we're applying a quality of 5% and a format of web P to be used in our applications.\u003C/p>\u003Cp>Next. Now bear with me. We're going to be doing some advanced transformations. Now this looks a little wild, but you'll see that we're applying some powerful transforms with that sharp API. So we're applying a blur, a tint, we're negating colors.\u003C/p>\u003Cp>All of this is done with direct us, which is super cool. And finally, in our last episode, we'll talk about preset transformation where we can assign presets to a key, and that way we don't have to type out all of those transformations, but rather place them in one consistent place in Directus. Finally, let's talk about that processing power. You might think it'd be pretty cumbersome if every time I reload this image, it reprocesses all of those transformations. And I have good news.\u003C/p>\u003Cp>That transformation is done once and then saved in Directus, and you don't have to apply that every time. That means that you can reload that image worry free of any extra processing power done. So there you have it. Now we've seen how direct us works with images out of the box and how we can apply access permissions, which is gonna be super handy because in the next 4 episodes, we're gonna be working with a new Nuxt application to work with these images and display them in a variety of ways using transformations. So what's next?\u003C/p>\u003Cp>In episode 2, we'll be looking at how to resize our images using width, height, and other parameters, and I can't wait to show you all how it works. So till next time, keep those cameras ready.\u003C/p>\u003Cp>Speaker 0: We've put together a reading list from suggestions within the director's team of resources they found interesting, educational, or entertaining this month. Firstly, we have how we built a powerful JSON data type for ClickHouse. They talk about some of the challenges they face, such as true column oriented storage, dynamically changing data without type unification, and prevention of avalanche of column data files on disk. Next, a conflict free replicated data type, also known as a CRDT, is a data structure that lets multiple users or applications make changes to the same piece of data. This blog post from BlockSuite, called Building Document Centric CRDT Native Editors, explores the evolution of collaborative document editors, including the transitioning from the traditional editor centric approach to the document centric approach.\u003C/p>\u003Cp>Next, not a blog post, but an interesting project, pdlight. Run a full Postgres database, locally in WASM, with reactivity and live sync As opposed to running it in the application, you can run this in the browser, dependency free And unlike previous Postgres in the browser projects, pdlight does not use a Linux virtual machine. It is simply Postgres in WASM. Finally, there are some roles that rely on you being able to work with a lot of people from different teams where sometimes that's not always possible time wise and they become a blocker. This post from Kirk Campbell addresses that challenge by looking at how to utilise AI, specifically Claude Projects, in absence of people being able to give you their time and how to bridge that gap.\u003C/p>\u003Cp>Those are 4 really solid recommendations from the team that we hope you enjoy. We want to take a moment towards the end of the changelog to thank our amazing community contributors who give their time and expertise to improving the director's project. Since last month, there have been 3 releases and 8 contributors. A massive thank you to Gerard for adding support for batch editing in many to many and one to many table interfaces. Thank you to Jun Hong for fixing a display error when selecting Kanban layout for the first time, adding condition to only show the create dashboard if the user has the correct permission, fixing tag interfaces to correctly handle reset white space option, ensuring new operation can reuse same key as previously deleted one in current flow editing session, fixing an issue where the WYSIWYG interface would reload with every keystroke if custom formats are given, and fixing query time logging, leaking memory for failed queries.\u003C/p>\u003Cp>Thank you to Ayush for ensuring Elements login page are correctly truncated when not enough space is available. Thank you to Chris for adding save options to role and policy item pages. Thank you to Shay for fixing an issue where the mail sender is not displayed correctly for instances that use special characters in project name. Thank you to Shane for ensuring failing GraphQL requests are properly handled by throwing an error and exposing errors and data information. Thank you to Osman for fixing disabled state of the add file empty state button for users without permissions.\u003C/p>\u003Cp>Thank you again to all our contributors, and you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank the GitHub Sponsors of October for financially contributing to Directus' development. A huge thank you to Clement, that's DLXCLM, for sponsoring our backer tier of $100 a month. A huge thank you also to Entle, d Mathams, Fergus, Omar, Marcus, c k, Tommy, Perissa, Utomic, Steven, Kadir, nonlinear, Andreas, Valentino, Anthony, John, Wayne, Adam, Jason, Birka, Jens, Marcel, Vincent, Mike, Weifan, Lassie, Pedro, and Gemma Liddin. Thank you so much once again.\u003C/p>\u003Cp>The money we are given from our GitHub Sponsors go straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. That is the end of this month's changelog. If you've made it this far, thank you so much for staying with us and watching till the end.\u003C/p>\u003Cp>We really appreciate it. All of these recordings will be available on director's TV as well as all 5 episodes of sharp focus. If you are wanting to see anything new from, us as part of the change log, this, would be a great time to tell us. We'll be sticking around in the chat for a couple more minutes. If you've got any questions that do come up throughout the month, Discord general, Discord help are the places to go.\u003C/p>\u003Cp>We will be back with December's version of the change log on December 10th at 3 PM, GMT or wherever that is your time. Discord handily tells you in your current, time zone, which is great. I've put all of the reading list recommendation URLs in the chat. If anyone's got any questions, as I said, we will be hanging around for a couple more minutes. But other than that, thank you so much once again.\u003C/p>\u003Cp>I hope you have a great week, a great month, and hopefully see you next time for December's change log. Have a great day, everyone.\u003C/p>","All right. Hello. Hello everyone. Hopefully you can all hear me and if you can I would love to know where you are joining us from today? 1, to say that you can hear me and, 2, because I'm nosy and I wanna know where everyone is. Last time everyone was all over and it was really great to hear. Personally, I am joining from London where we had the first snow of the fall this morning. It was quite rainy snow like it wasn't magical magical but it counted and that's what matters so that is where I am from. Excellent, Carmen, thank you so much for telling me you can hear me, I appreciate it. Vienna, Austria, we've got Sweden, USA, Finland, amazing, welcome. I hope you're all having such an amazing day. Devon, Germany, very cool, Netherlands as well. We have some very fun and also educational, material coming up for you for the rest of this show. If you've got any questions throughout, we've got the chat open, and there's a couple of people from our team in it as well. So please do let us know if you have any questions. But we are starting off, the November change log with a product update from Bryant. So I'm gonna send you over to him. Thanks, Beth. Bryant here for Directus, and here's a quick rundown of the core changes that have happened since the last changelog. Version 11.2.0 brought TUS resumable file upload protocol support to the Supabase, Azure, Cloudinary, and GCS storage adapters. And we already had tough support for the AWS s three compatible and local asset storage adapters. Which basically means, you are now fully covered when uploading large files, like videos to Directus. In version 11 dot 1 dot 2, we introduced a migration for Directus comments. There's now a dedicated directus underscore comments collection, which will make it much much easier for you to use comments in your front end projects via the API. We previously stored comments in the directus underscore activity collection, which admittedly was a bit messy because of all the other activity logs we stored alongside those comments. So this welcome change brings new API endpoints for comments, but the existing endpoints are still 100% totally functional. One note though, primary keys are now UUIDs instead of integers. So that could impact any custom type checking implementations you set up. The Directus SDK's internal comment endpoints have also been updated to reflect this change. And I know you're all for avoiding errors, so just ensure your Directus version is compatible with the latest SDK when you're using those comment functions. And there's just one more change with version 11.1.2. We've made some improvements to content versioning. Internally, we stored every change to a content version separately in the directus_revisions collection. And then we merge those together when promoting a version. In this release, we've added a new delta field to directus_versions collection, and that combines all the revisions into a single field. So all that to say, this means you'll be able to prune your revisions, which are the individual changes to a piece of content, without losing your versions. And with that, back over to you, Beth. I'm going to demonstrate each of the new extensions in Director's Labs this month. As a reminder, Director's Labs is our team's experimental organization on GitHub. Typically, these extensions aren't maintained the same way that the main directors project is, but we have now committed to maintaining 4 of them. They are the spreadsheet layout, the Gantt chart layout, the Command Palette module, and the calculated fields bundle. You can see all these extensions, including which extensions are maintained, over on the extensions repo. Onto the demos. Directors AI is a collection of extensions that allows you to leverage the best AI tools from within Directors Automate. Today, we have 2 announcements, a brand new extension and an improvement. Let's start with a brand new extension, the AI web scraper. This allows you to scrape web pages and receive structured data back. We're using FireCrawl to perform the scraping, so you'll need an API key from them. You put a web page or a link to a PDF. Here, we're using directors. Io. If we go into the actions before scraping, here you can get the scraper to perform actions on the web page and add additional metadata about the action. For example, which element to click on or how far to scroll. For the data to extract, here's where you tell it what data you wanted to extract, and it will use AI to extract it. In the property description, we're going to put permission, string as data type, and we're going to enable making it a requirement. Optionally, there are additional formats, so you can also specify how you want the pages content to be presented back to you. They've also just had their launch week and we've implemented their brand new features such as the country, language, and mobile options. The other announcement is an improvement to the AI writer. The biggest change here is that before you could only use OpenAI's models and now we're extending the option to use multiple AI providers such as Anthropic, as well as different AI models. Other than that, everything else works as it did before, and this expansion was done thanks to an issue that was opened on the Directors Labs Extensions repo. So please do keep bringing your feedback for these. That's what's new for Directors AI We often hear from people that they love Directors insights, but want more ways to visualise their data. So we've added 4 new panels, which you can install now via the marketplace. 1st, we have the tree map chart. Select a collection, optionally a filter, which field you want to use for the labels and the value, and any aggregation you would like to perform. For example, here we are summing the value of all deals per company, so each company has its own cell at the size of all values related to that company. Next, we have funnel chart. Now, the funnel chart works exactly the same way, but visualises data differently. So depending on your needs might be more appropriate for you. For example, here we have a typical sales funnel. Funnel charts excel when people, or entities, follow a linear path and you want to see how many convert between stages. Next is the scatterplot. If you've never seen one before, this is a very typical two axis chart where values are plotted as dots. You can optionally add axis labels and hover over any of the dots to see the values. Finally, we have the timeline chart. This is a sibling to the Gantt chart layout that we recently released last month. We have less space to work with in a panel, so it's a simplified version, but it can be really powerful to include for project management. This relies on having 2 date fields, a start and an end, and then a label for the axes on the left and some display text for the item itself. We hope you enjoy our new panels. We certainly think that people are going to get a lot of use out of them. Extension authors often want to extend the functionality of our built in interfaces, And a few months ago, we released the WYSIWYG and block editor as boilerplates to build on top of. Today, we are releasing our first layout boilerplate, the table layout. This was already the basis for our spreadsheet layout extension, and now you can build on top of it and extend it too. You can find this in our Director's Labs extension repo, And we hope that this supercharges your extension building. Hello there. Today, we are announcing our brand new and improved guest author program. The directors community is filled with people who use directors in so many different ways, so many different languages, frameworks, use cases, and this program is all about bringing those experiences to the tutorial section in our new documentation to help new directors users and existing directors users be as successful as possible. So we invite you to apply to be part of our brand new guest author program. Previously, our guest author program worked where you submitted your own ideas. In this program, once accepted, we have identified a huge number of tutorials that we think would be hugely impact for our users, and we invite you to write them and get paid doing it. We will support you through that whole process reviewing content and making sure what you create, is the best it can possibly be. So if you are an experienced technical writer and you know how to use directors, this program is for you. It's about educating others about how to be successful and make the most of directors. We are going to open applications a few times a year. This first open application starts today, and it will be open through the end of November, to kick off shortly after. So we really look forward to seeing your applications and the amazing tutorials that you can write to help others. Alright. Hopefully, I am back. I'm super excited about those announcements. I did put in the chat the links for applications to become a guest author and also the Derick's Labs extensions, URL as well, so do check those out if you haven't already seen them. I'm super interested in hearing about what you are excited about from those announcements or if you're using any extensions. We've got a couple of minutes in the chat to, have a talk with you about them So if you have seen any that you're like, this is gonna be particularly useful to me, we'd love some instant feedback on what is getting you excited, what you might be using them for. I know and I think I said this last month to you about the Gantt chart, but anything project management, super exciting. Like, just to be able to see a timeline, like a crisp timeline is super exciting for me. Also, the funnel, we love to see it. So, yeah, if you do have any thoughts, keep them coming in the chat whilst we are talking through them. And if not, we have the Discord throughout the month, if you've got any questions about anything at all. I'm gonna give it a couple more seconds. If you are typing, type quickly, before I move us on. But, yeah, just, as we said in there, lots of feedback coming in through, which is super helpful in working out the directions as well. So that is all good, and we're excited to keep things coming and keep telling you about them in the change log. Alright. I am going to Ben says, I'd really like some more documentation on using real time stuff in Next. Js. Carmen, I believe you are in the chat as well, so that, hopefully, you are able to give some insight on what is upcoming. Josh says I found your software, and I'm using cool. Excellent. Very excited to see it. So I'm gonna move us on to the next segment, which is slightly cringey. So you have been warned. We had a lot of fun putting this together, and it's time for a completely new segment in the change log. We do try and keep things, new and fresh, so we haven't done this before. This is a segment called Automate My Life, and we really hope you enjoy it. Hello, and welcome to Automate My Life. In this show, we help regular people using Directus. And today, we are in sunny London with our 1st person in need, Sean. He has lots of problems. We can't help with most of them, but we certainly can help with 1. Over to Sean. So I'm here with Sean who has called in the Automate My Life team with a problem. Sean, what can we help you with? Hi, Keir. Thanks for coming. I have a problem. Tell me more. Look at this plant. What do you notice about it? Sean, this plant is dead. That is the problem. Okay. Yep. See, I have plants and they are not dead. But then no matter what I do, they become dead. Despite your best effort. Despite my best and sometimes your mediocre efforts as well. Okay. I understand. Well, I think this is something we might be able to help with over in the workshop. Marvelous. Automate my life, director's team. Over to Beth. Okay, folks. You've heard what Sean's problem is. We've brought you here as the best of the best to work out a solution for Sean. The future of his plants relies on you. What have you got? Hey, Sean. Welcome to the Directus workshopping team. We're all about automating our lives every day. I have a similar problem. My wife my partner, has a pepper garden. She's an avid gardener. She loves to garden. This year, she actually picked up a little pH temperature monitor or soil tester, to give you the soil quality and quantity and make sure that she could amend the soil properly for those kinds of things. But as I'm thinking about this now, I'd actually like to work with her, and we'll get a I I think next year, I'm actually going to do this particular project. But in the meantime, we'll talk about some of the ways we could solve this problem. There are both DIY options and aftermarket options. I think I'll opt for the DIY, and that will be using something along the lines of an e s ESP 32 Wi Fi Sensor. There's a nice Directus blog that kind of goes through a use case for this, but we're gonna talk a little bit more in detail about some specific sensors and capabilities that we'll need to do for this. So there's an ESP 32. This has built in Wi Fi. The ability to integrate that with your sensors and plug that into your sensors, so we can collect data, soil temp moisture contents, and, temperatures. So the key thing is to making sure that your plants grow successfully. Now, in order to make this all work together to get you alerts and notifications, I'm gonna hand you off to my main automation guru, mister Bryant Gillespie. Sorry, Jonathan. I, had these thinking glasses on to consider this problem. I just want to say this is an amazing use case for Directus Flows. We are going to be able to send automated notifications whenever these values are out of bounds. So here's what I'm thinking. Whenever a new item is created in the logging collection we trigger a flow. That flow does some magic and it will run some conditional operations to determine whether those values for moisture, for pH, for temperature are within the bounds that we set. If they are within those bounds, nothing happens. You're a okay Sean. As soon as those values step out of bounds like they're on the court, boom, you get a message via SMS through the Twilio API. And that's a wrap. Now to kick it over to my main man, AvDV, our head of insights. Hey, Sean. If you're anything like me and you've got a lot of plants, I can imagine all these sensors are gonna be bringing in a ton of data into your into your director's project. So what better way to use insights or our dashboards to build up, targeted, insights which give you a summary of all the information in one page. We have, time series charts that you can start to track the pH, the moisture and the temperature over time. And with built in filters as well, you can you can filter by room, by particular plant, or even by the season if you want to track, the growth or the moisture over the seasons. There's a ton more use cases that we could build in, but those are just good. Some 3 quick summaries of what you could build with the Director's insights. Wow. This all sounds great. I'm gonna leave you in the workshop to make this real. So Sean, we built you a soil monitor. There's sensors in here that every hour monitor the status of the planet. And if it's in need, we'll let you know via text messages exactly what's wrong. Wow. That's amazing. I'll never kill again. Thanks, directors. Thank you so much. What a wonderful first episode of Automate My Life. Thank you for taking part. If you have an idea for a future episode, you can probably keep it to yourself. This is probably a one and done. Thank you, and bye for now. And that's something we can help you with. I certainly hope so. I think we can handle discus team. What's the new company again? Director. Director. Wow. That was quite something, I hope you enjoyed. And I'm also very glad that the bloopers reel did in fact stay in because it was a lot of fun to record. There were some great ones. So, next up is sorry. I've gotta compose myself. It was so cringey. I could still feel it, like, in my cheeks. So next up, we have what I always say is my favorite part of the change log, and that is the community showcase. This month, we have Josh talking through the note taking system he built, so I'm gonna send you over to him. Hi there. I'm Joshua Behmendurfer, a software developer and IT manager at a Christian nonprofit. I have a tendency to build odd solutions like this one to solve mildly frustrating problems. Today, I'm showing off an offline first portable note taking system that integrates with Directus. It uses the Tiletec's awesome hackberry pi 0 for the hardware. This little doohickey with a physical keyboard, And Directus to store and retrieve data. Here's how it works. 1st, in Directus, I'm going to create a new collection called to do with a manual primary key which we'll set to the current date from the note taking system. Then we'll add a single simple markdown field that we'll use for our task list. And you can do more complicated stuff. I'm just going with the markdown field. Then I'm going to add a, assign to field that references a contact so that I can show how, relationships work with the note taking system. And then we should be good to go. Alright. Now let's take a look at how to create and edit notes on the device. I'm gonna use my Android phone here because it's pretty hard to take a recording of the Hackberry without my fingers getting in the way. I've got my editor open with a new text file. This file contains commands that interface with the Directus API. Let's skip the current date so that we can refer to it when creating today's to do and then get the ID of my contact entry so that the to do could be assigned to me. I'm using the Directus search and field parameters to find just my contact ID. Alright. Now we've got that ID. Let's make a view to do for today. We could use the, dollar sign to refer to the output of previous commands. Like, you were setting the ID to the current date. And then I'm going to assign that contact to my that, to do to myself. We're on it. Now let's add some tasks for some things I need to do today. Well, let's see. We could take out the trash. I should probably do that. We should do the laundry. That definitely needs to get done. What else? I should probably record this video. Alright. And then when I hit control r, these changes sync to Directus. And then they're also saved locally in this file for offline editing. I can make changes and they will get synced to my Directus instance. So let's take a look at what has been saved. As you can see, the tasks, assignment, and date are all here. I built this system because I forget things pretty easily and I'm always remembering them at the wrong time. So, to try and capture those fleeting memories, I tried to take notes on the go. Especially at Berk when I'm needing to walk between different people's offices and just catch up with all sorts of things people are saying while I'm, away from my desk. So, I started out with all sorts of notebooks and even designed several variations of reusable note cards, but I could never find the right note card at the right time and digitizing them constantly to make them searchable turned out to be quite a chore. To make the switch to digital notes, I started with Obsidian. It worked pretty well, but I never had the flexibility in data structures and the querying capabilities that I wanted. The text editing experience and syncing proved finicky at times as well. It was close to what I wanted, but not quite right. I solved the structured data organization problem using Directus. The Data Studio makes it a breeze to set up all the collections and fields I need to organize my data the way I want to and it backs it with the full power of a SQLite database. Anything it doesn't support out of the box, I'm a software developer, I can build on to it. But, I had two main issues with the vanilla Directus setup. Number 1, it doesn't work offline and I was always forgetting to hit the save button in my notes And trying to switch between other apps on my phone and direct us while in the middle of a bunch of other things just put too much friction in the note taking process. So, when I saw the Hackberry Pi come up for sale, it seemed like the perfect crazy gadget for taking notes. My, fat thumbs make typing on a touchscreen a pain, so a device with a physical keyboard was perfect. And, it's still small enough to fit in my shirt pocket. I snagged one once they were in stock and while waiting for it to ship from Germany I threw together some simple software to communicate with Directus. This system uses the micro text editor, which is a convenient, easy to use command line text editor that also happens to be extensible with Lua. And I combine it with an indentation based syntax for encoding JSON as the small scripts do things up to direct us. It's not pretty and it does have all sorts of interesting ways of crashing but it works very well for my use case. When I need to take notes, I press the hotkey on the Hackberry, the note I want to edit comes up, then I just type and sync to Directus once I'm back online. I doubt this exact system will be of much use for anyone else but it just goes to show the creative things you can do with Directus to Scratch, personal or work related itches. There's all sorts of wonderful ways you can wire things up. Thank you for your time. Goodbye. Alright. Thank you so much to you, Joshua, for taking the time to, record the video and share with us as we always love to see what people are doing with directors. I see that a couple of people have got a video blur, we are on it and we're trying to fix it and see what we can do. Hopefully it comes back to normal. I don't think it's been that way the whole time so fingers crossed it's just a bit of a rough patch and it will be fine again going forward. I'm gonna send you over to Carmen who has the first video of Sharp Focus and I'm gonna allow her to talk through exactly what that series is and the rest of the series is also out now on director's TV. So I'll find the link for you in the chat as well. Alright. Over to Carmen. Hello, everybody, and welcome to Sharp Focus, the show where we shine a lens on how Directus helps you transform your images and truly make them shine. My name is Carmen, and I will be your guide over the next 5 episodes where we'll learn how images can be transformed, how they work under the hood, how they can be manipulated, how they can be resized to be more performant, how you can use advanced transformations, and how you can use presets to take all of the above and apply it in one fell swoop. Now as it turns out, Directus offers a bevy of options for working with images out of the box powered by the sharp API from Node JS. And we're going to be taking a look at how to do that in a way that's going to be super fun and super approachable. So won't you join me in grabbing our cameras and let's dive right into finding out how Directus works with images. So here we are in my very own Directus project running locally dedicated to my photography. Right now, we are in the file library module where you can see that I have a folder over here on the left sidebar. This folder contains photos from my latest trip to my home country Chile. Now, I'm going to use Directus to work with these images for different applications, thumbnails, that sort of thing. But, as you can see, a lot of these images are of varying sizes and qualities. But that's okay. We can use to transform these images to create some consistency and even add some cool effects, which we'll be doing in this series. But first, let's take a little look at what makes these images tick. Now I've already uploaded these to Directus, so this gives me a couple of options to work with them. If I click on one of the images, for example, the photo of my trip to the national park, Torres del Paine, we will see that we can do things like change the title, add a description, some tags, location, if we wish, some focal points, more on that later, and also have access to its asset ID. But that's not all. We can even edit that image. Now we're not going to be doing that in this series, except for using it to create focal points. But again, more on that later. Now, if I want to access that image from say my browser, I can take that asset ID and navigate to my instances URL/assets/the ID of that image, which is fantastic. But one thing to bear in mind, I'm logged into Directus as an admin. But if I wanted to access this image from an application, I would need to assign that application the correct permissions, which we can do here in Directus. When I navigate to the settings module and then go over to access policies, we can see that I already have some permissions and roles set for administrators, which is my logged in user. But I wanna make these images fully public. So what I can do is click here on public and under permissions, click on add collection and select the Directus Files system collection. I will be able to assign different permissions for folks accessing that from anywhere. But I only want to give folks the ability to read. So we'll click here on read access and then assign all access. The last thing to do is to save that permission. Fantastic. Now I can access this image from a browser, from an application, from anywhere. So let's go back and look at that image. Now you remember that these images are of different sizes and qualities. So in order to create some consistencies, we're going to be applying different image transformations, but also giving them a little bit of pizzazz with some advanced transformations. It's gonna be super cool. Before we wrap up this video, I'd like to show you a couple of the types of transformations we can do. In the next video, we'll be looking at image manipulation where we can use query parameters like width, like height, and fit to manipulate our image and in this case make it a consistent 300 by 300 pixels. But that's not all. In our 3rd episode, we'll be looking at how we can manipulate the size and performance of our images. For example, here we're applying a quality of 5% and a format of web P to be used in our applications. Next. Now bear with me. We're going to be doing some advanced transformations. Now this looks a little wild, but you'll see that we're applying some powerful transforms with that sharp API. So we're applying a blur, a tint, we're negating colors. All of this is done with direct us, which is super cool. And finally, in our last episode, we'll talk about preset transformation where we can assign presets to a key, and that way we don't have to type out all of those transformations, but rather place them in one consistent place in Directus. Finally, let's talk about that processing power. You might think it'd be pretty cumbersome if every time I reload this image, it reprocesses all of those transformations. And I have good news. That transformation is done once and then saved in Directus, and you don't have to apply that every time. That means that you can reload that image worry free of any extra processing power done. So there you have it. Now we've seen how direct us works with images out of the box and how we can apply access permissions, which is gonna be super handy because in the next 4 episodes, we're gonna be working with a new Nuxt application to work with these images and display them in a variety of ways using transformations. So what's next? In episode 2, we'll be looking at how to resize our images using width, height, and other parameters, and I can't wait to show you all how it works. So till next time, keep those cameras ready. We've put together a reading list from suggestions within the director's team of resources they found interesting, educational, or entertaining this month. Firstly, we have how we built a powerful JSON data type for ClickHouse. They talk about some of the challenges they face, such as true column oriented storage, dynamically changing data without type unification, and prevention of avalanche of column data files on disk. Next, a conflict free replicated data type, also known as a CRDT, is a data structure that lets multiple users or applications make changes to the same piece of data. This blog post from BlockSuite, called Building Document Centric CRDT Native Editors, explores the evolution of collaborative document editors, including the transitioning from the traditional editor centric approach to the document centric approach. Next, not a blog post, but an interesting project, pdlight. Run a full Postgres database, locally in WASM, with reactivity and live sync As opposed to running it in the application, you can run this in the browser, dependency free And unlike previous Postgres in the browser projects, pdlight does not use a Linux virtual machine. It is simply Postgres in WASM. Finally, there are some roles that rely on you being able to work with a lot of people from different teams where sometimes that's not always possible time wise and they become a blocker. This post from Kirk Campbell addresses that challenge by looking at how to utilise AI, specifically Claude Projects, in absence of people being able to give you their time and how to bridge that gap. Those are 4 really solid recommendations from the team that we hope you enjoy. We want to take a moment towards the end of the changelog to thank our amazing community contributors who give their time and expertise to improving the director's project. Since last month, there have been 3 releases and 8 contributors. A massive thank you to Gerard for adding support for batch editing in many to many and one to many table interfaces. Thank you to Jun Hong for fixing a display error when selecting Kanban layout for the first time, adding condition to only show the create dashboard if the user has the correct permission, fixing tag interfaces to correctly handle reset white space option, ensuring new operation can reuse same key as previously deleted one in current flow editing session, fixing an issue where the WYSIWYG interface would reload with every keystroke if custom formats are given, and fixing query time logging, leaking memory for failed queries. Thank you to Ayush for ensuring Elements login page are correctly truncated when not enough space is available. Thank you to Chris for adding save options to role and policy item pages. Thank you to Shay for fixing an issue where the mail sender is not displayed correctly for instances that use special characters in project name. Thank you to Shane for ensuring failing GraphQL requests are properly handled by throwing an error and exposing errors and data information. Thank you to Osman for fixing disabled state of the add file empty state button for users without permissions. Thank you again to all our contributors, and you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank the GitHub Sponsors of October for financially contributing to Directus' development. A huge thank you to Clement, that's DLXCLM, for sponsoring our backer tier of $100 a month. A huge thank you also to Entle, d Mathams, Fergus, Omar, Marcus, c k, Tommy, Perissa, Utomic, Steven, Kadir, nonlinear, Andreas, Valentino, Anthony, John, Wayne, Adam, Jason, Birka, Jens, Marcel, Vincent, Mike, Weifan, Lassie, Pedro, and Gemma Liddin. Thank you so much once again. The money we are given from our GitHub Sponsors go straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. That is the end of this month's changelog. If you've made it this far, thank you so much for staying with us and watching till the end. We really appreciate it. All of these recordings will be available on director's TV as well as all 5 episodes of sharp focus. If you are wanting to see anything new from, us as part of the change log, this, would be a great time to tell us. We'll be sticking around in the chat for a couple more minutes. If you've got any questions that do come up throughout the month, Discord general, Discord help are the places to go. We will be back with December's version of the change log on December 10th at 3 PM, GMT or wherever that is your time. Discord handily tells you in your current, time zone, which is great. I've put all of the reading list recommendation URLs in the chat. If anyone's got any questions, as I said, we will be hanging around for a couple more minutes. But other than that, thank you so much once again. I hope you have a great week, a great month, and hopefully see you next time for December's change log. Have a great day, everyone.","61f4c782-d881-4b7c-8ac6-3214b0ee3cdd",[230,231,232,233],"3ff4cb13-ce14-41b6-b91f-9ae28a68a5c6","27249462-20d7-46cc-8035-4d85b310b61f","8fba3cc4-9a25-4280-aa0d-3ff816d0abd9","182a93e5-058a-478b-bf9f-99c6e5978950",[],{"id":152,"number":153,"show":122,"year":154,"episodes":236},[156,157,158,159,160],{"id":160,"slug":238,"vimeo_id":239,"description":240,"tile":241,"length":242,"resources":8,"people":8,"episode_number":243,"published":244,"title":245,"video_transcript_html":246,"video_transcript_text":247,"content":8,"seo":248,"status":130,"episode_people":249,"recommendations":255,"season":256},"5-december-2024","1037759355","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes a year in review recap, a community showcase from Petros showing a universal translator extension, an episode of a new show on Directus TV called Bobby Tail's Little Library and more...","aec34c4a-1d8e-4e5c-acb3-a3a5cd456af2",39,5,"2024-12-10","December 2024","\u003Cp>Speaker 0: Alright. Hello. Hello, everyone. Welcome to December's version of the change log. Hope you're all having an amazing day.\u003C/p>\u003Cp>If you are joining us live, welcome. Let us know in the chat where you are joining us from as usual. We love to see it. We've got a really great show for you today. We have the usual product and extension updates.\u003C/p>\u003Cp>We've got the year in review for you, a community showcase, and a new show that we launched on director's TV today. So stick around if you are able to. We'd love to be able to chat with you along the way. Hello, everyone. So great for joining.\u003C/p>\u003Cp>Hello. Hello. Yeah. Let us know in the chat if you are joining. Oh, Canada.\u003C/p>\u003Cp>Hello. Welcome. Morning time, early morning time. Welcome. Glad for you to be joining us.\u003C/p>\u003Cp>Florida, super exciting. Much more exciting than London, personally. I think so at least. But, yeah, great to have you all here with us. So I'm kicking off with Alex who's gonna take you through the product updates for December.\u003C/p>\u003Cp>Speaker 1: Hey, folks. Alex here, director of web engineering, and I'm going to be taking you through the core updates that have happened since the last changelog. There's been a few releases, but here are the notable things to be aware of. In 11.2.2, we made s three connection settings configurable via environment variables. This includes things like connection timeout.\u003C/p>\u003Cp>In 11.3.0, we introduced new retention settings for activities, revisions, and flow logs. These 3 system tables can become quite large, and now you can change how long they will be kept for being preened. Earlier this year, we committed to providing security updates to Directus 10 until the end of the year. Make sure you upgrade to 10.13.4 if you're still on the version 10 family. The same patch has been included in the Directus 11 patch as well.\u003C/p>\u003Cp>That's all for me. Handing back over to Beth now.\u003C/p>\u003Cp>Speaker 2: I'm going to demonstrate each of the extensions new in Directors Labs this month. As a reminder, Directors Labs is our team's experimental org in GitHub, which regularly publishes new extensions. Here's a demo project to showcase what's new. The address completion interface integrates Google Places auto complete data API directly into the director's editor. This improves data quality and stores data in a standard GeoJSON feature format.\u003C/p>\u003Cp>It also enhances user experience by speeding up address entry. You can swap between map tiles or, when setting up the interface, skip the map altogether. The tour group interface is one we are super excited about. You can set up guided tours around director's editor to help your content authors better understand your configuration. You can set up multiple with their own labels, but we've set up one here to demonstrate.\u003C/p>\u003Cp>As you see, it's a multi step tour which moves between any of the interfaces in the UI. If we go to the interface settings, here, you can see it's a group interface, so items which are children can be included in the tour. You can add any number of tour steps. We have to first specify any element to select. This extension injects a couple of classes for each field, one for the whole field including label and one just for the output.\u003C/p>\u003Cp>You can specify a title and description and other metadata for display. This is gonna be so helpful when handing off your data project to end users. This is a choropleth panel. You've likely seen something like this before where countries are highlighted more intensely based on the higher values. Here, we have a views collection and a field called country, which contains a 2 letter ISO code.\u003C/p>\u003Cp>You can also use 3 letter or m 49 country codes. Like many other panels, pick an aggregated field and function. Here, we are counting the number of items with the country. We think this will be useful for understanding visitors and customer data based on country. The HubSpot API operation provides a way to interact directly with the Hub Spot API from Directors Automate.\u003C/p>\u003Cp>Once you provide your API key with correct access, you can interact with a load of endpoints like contacts, deals, and emails. Once you select an endpoint, you have a number of suitable actions available. Here, you can create, read, update, delete, or list your contacts. So this could be used to update a record whenever data changes in Directus, for example. We're really happy to be offering this extension to speed up integrations with your existing data sources.\u003C/p>\u003Cp>Speaker 0: Alright and I have just now put the link to check out all the extensions in the chat so if you are excited, as we hope you are, about those extensions do let us know, check them out yourself. Before I put us over to the year in review, I do also want to shout out a new project Brian has created called salty open source Santa. You write a letter to Santa including your GitHub username and Santa tells you if you are on the naughty or nice list. It's all in good fun but I also am really excited that Bryant has put through a blog post and a video talking through how he created the project as well. It's well worth checking out, so I will also include the links to those in the chat as well.\u003C/p>\u003Cp>Right now, I'm sending you over to Wrike to kick us off for the 2024 director's year in review.\u003C/p>\u003Cp>Speaker 3: Welcome to our 2024 recap where we walk through all of the cool and exciting things we added to Directus this year. I'm Reik, the CTO and cofounder of Directus. I'm going to be kicking this off by taking you through what we shipped in new releases to the core Directus project. Seeing that we shipped over a 1,000 things, I won't be listing all of them, but here's the top ones. Opening with a small but impactful feature, we added vocal point support, which allows you to set a vocal point coordinate via the API or the data studio when you're cropping images.\u003C/p>\u003Cp>That way you can ensure that the important parts of your image remain visible no matter what sizes you're generating in the API. In March, we released the beta of the marketplace, launching our extensions registry, enabling the distribution and installation of extensions in any Directus project. This was also a great way for us to be able to ship new features via extensions, which Beth will talk about later. We also brought upgrades to content versioning and live preview so you can check out what content will look like in your project without needing to publish it to the API. In version 10 dot 11, we introduced public registration, simplifying the process of allowing any user to create new accounts.\u003C/p>\u003Cp>This is available both in the Studio and via our new registration and verification APIs. To further extend public registration, we also introduced configurable user limits so you can control the number of users in your project, giving you more control over how your project runs. Over the summer, we released a new major version of Directus version 11. This introduced policies, changing the way you can compose access control throughout your project. We also used this opportunity to announce our first ever extended security update period for a version of Directus for those who weren't quite ready to migrate to the new version yet.\u003C/p>\u003Cp>In your project settings, you can now also find streaming system logs inside of the data studio for greater visibility into what's going on in your API and debug any problems along the way. For more information on this or any of the other things I just mentioned, do check out the detailed release notes on GitHub. Next up, we have Kevin taking you through our cloud recap.\u003C/p>\u003Cp>Speaker 4: Thanks, Reich. Now I have the pleasure of recapping everything that's happened this year for directors cloud. If you've not heard of it, directors cloud is the way to host directors projects managed by the team who build it. You, of course, can still self host Directus, and we make that as easy as possible. But if you want hardware maintenance, upgrades and migrations, and storage handled, Directus Cloud is for you.\u003C/p>\u003Cp>We provision a database, asset storage, caching, and more. Just a few button presses in the cloud dashboard, and you're ready to go. Now 2024 added a lot of requested features and capabilities to Directus Cloud. Probably the biggest change is to our pricing and the introduction of our new starter tier. This lowers the barrier even more to getting started, and it starts at just $15 a month.\u003C/p>\u003Cp>Remember, that's not only Directus, but a database, asset storage, caching, and all of the work required to keep an application online and secure. We also introduced a new self serve business tier that sits above our existing professional tier, but for customers who aren't quite ready for enterprise. This year, we also introduced auto scaling to cloud projects to make sure they always stay online. There was actually a significant amount of infrastructure work in the background to enable all of these changes, so shout out to our infra team for making it happen. In Director's Cloud, you can now add custom domains and set advanced project configuration that allows the editing of key environment variables.\u003C/p>\u003Cp>This is a big deal. It was one of the key pieces of feedback we had from cloud customers, and we're happy to have addressed it. We've picked important variables and a safe kind of pre picked allowed values to ensure that all projects on directors cloud continue to run smoothly. But if you want to see more, just reach out and let us know what you'd like to see. Lastly, we hear that launching a directors project for the first time can be a bit daunting, as you have a powerful but ultimately blank canvas to set up.\u003C/p>\u003Cp>When you set up a cloud project, we now offer the ability to set it up with one of our cloud templates, one for CMS, one for CRM, and one for ecommerce use cases. That's a lot of new stuff in Director's Cloud this year. Now we're reaching the end of the year, and quite frankly, I need a nap. So I'm gonna kick it back over to Beth to talk to you about all of the new extensions we shipped in 2024. Thank you so much for coming with me on this journey this year, and I'll see you next time.\u003C/p>\u003Cp>Bye for now.\u003C/p>\u003Cp>Speaker 2: Thanks, Kevin. Hello again, everyone. In every change log we have, we talk through the new extensions we release. There've been quite a few, so I'm here to take you through a short recap of some of our favorites. Starting off with directors dotai.\u003C/p>\u003Cp>Directors dotai is a group of 11 AI based extensions, which brought new capabilities to directors automate. We've integrated with best in class AI platforms to allow you to transcribe audio, generate images, write text, and scrape web pages. There's a whole lot in Director's AI, and we have a whole series on Directus TV to talk you through each of the extensions. We've added a bunch of new interfaces for Directus Editor. Rich interfaces for video, audio, PDF files, and address auto completion Collaborate with our new whiteboard and Wherebycalls interfaces Allow users to navigate multi selections via API with the multi level Autocomplete API interface One of our most upvoted feature requests, calculated fields, is also now available as an interface It supports loads of functions and dynamic data from your items.\u003C/p>\u003Cp>And our new tool group, releasing today, allows you to create guided tools around the editor to support your content authors. We've added some really powerful new layouts. The spreadsheet layout and the Gantt chart layout. Directors Insights has also received lots of love with a load of new panels, a more detailed table that you can drop in, Lots of new charts: scatterplot, funnel, tree map, timeline, and a choropleth map. And a new flow trigger panel, so you can execute automations directly from your dashboards.\u003C/p>\u003Cp>Finally, new service integrations. As well as Whereby Video calls that we mentioned earlier, we now have integrations with Flausible Analytics, resend's email service, and the HubSpot CRM. Moving away from extensions, I also want to briefly talk about templates, which is something we've also added this year that can help you get building with directors faster. This year, we launched a template directory, with templates built by both our core team and community members. Currently, there are templates for building a content management system, a customer relationship manager, an ecommerce store, an agency operating system, an event operating system, and an adventure business kit comprising a website, blog, and CMS.\u003C/p>\u003Cp>These are all available to browse on directors. Io / templates. I'm gonna hand over to Carmen now for taking you through the content recap.\u003C/p>\u003Cp>Speaker 5: Thanks, Beth. I'm Carmen, developer educator here at Directus. This time last year, we launched Directus TV. Between then and now, we've added over 250 episodes across nearly 40 shows. A huge amount of entertaining and educational resources.\u003C/p>\u003Cp>Some highlights from this year include new seasons of 100 Apps in 100 Hours where Bryant races against the clock to create his own versions of a customer relationship manager, a remote job board, and a social media platform to name only a few. A new season of Trace Talks from John and Pedro interviewing senior engineering leaders such as David Zimmer from Netflix and Dana Lawson at Netlify on their journeys and experiences in the tech industry. Also, a new season of Short Hops continuing to take you through quick ways of getting more from Directus, the 20 24 episodes, including transformation presets, focal points, and version control. We've also launched many new shows including what's in your dock, where we ask guests to show us their most used hardware and software, Ready, Set, Battlesnake, where Andrew and Kevin build a capable snake inside of a Directus project. As well as the joy of theming where Bry Ross shows how to make theming masterpieces.\u003C/p>\u003Cp>Democratizing data got to grips with using open data and Directus to build new applications around data like the trees of London and meteorite landings. Bridging Bytes brought together technology leaders to discuss the future of sustainable open source and how agencies innovate. Enter the workshop, invited friends from Twilio and Deepgram to build extensions live on air. And my new show, Sharp Focus, hosted by me as I show you how to use image transformation as part of Directus files. Keep an eye out for this and many new shows at directus.i0/tv.\u003C/p>\u003Cp>This year, we've also published over 50 new tutorials to help you get the most from Directus. We've published getting started guides for Sveltekit, ASTRO, Next, Nuxt, and more. Developers in other languages, we got you. There's loads including posts for Django and Flask devs, those who use Flutter, Kotlin, and Swift, and for the Laravel community too. You can now find loads of Directus automate tutorials showed how to integrate with Clarify's image recognition APIs, GitHub and OpenAPI.\u003C/p>\u003Cp>We believe you should be able to host Directus anywhere. So we wrote new content to help you deploy Directus on Azure, Google Cloud Platform, and AWS. There are some really cool project write ups as well, including building ecommerce projects with Stripe integrations, using Directus as a baby health monitor with Opsgenie, and building event registration systems. We also have new migration posts, including one for WordPress and integration with different indexing systems like Algolia and Elasticsearch. This is not all and we encourage you to take a look at our tutorials in our docs to explore our whole collection.\u003C/p>\u003Cp>That's all for me. We hope you've enjoyed this recap. And as always, if you've got any questions, let us know on Discord.\u003C/p>\u003Cp>Speaker 0: Alright. So that was a recap of some of the highlights for 2024. Whether you have been with us the whole year or you are new to directors this year, we'd love to hear what your year has looked like with directors, whether anything has changed, whether you've brought in anything new that we've talked about. But, yeah, it's been great to spend a second to just look back rather than constantly looking forward, and put together the year in review for you all. So we hope you enjoyed it.\u003C/p>\u003Cp>Next up is my personal favorite. I say this every month and every month it is true. It is the community showcase, and this month, we have Petrus Diaz talking through the universal translate flow operation.\u003C/p>\u003Cp>Speaker 6: Hi, everyone. My name is Petros Diaz, and I'm here to demo, Directus flow operation extension that we've built called a universal translator. And the main task of the universal translators is to translate anything that you throw at it, be it a string or a JSON object or an array. Let's have a quick look of how that works. You just place the universal translator within your flow and the only thing you need to do is provide the input translate which can be a direct string or a variable and choose the language which can be based on the user language that the user has selected, or you can choose from the drop down.\u003C/p>\u003Cp>We haven't included the entire language collection here, which we can do so in the future. Let's just leave it to auto for now. And just let's, let's run it real quick so you can see the results. I have a ready made flow here. So this flow creates a PDF, for the user in the language they've selected.\u003C/p>\u003Cp>And let's have a look at the result. Here it is. So you can't really tell which are the translated fields here but status, author, process, location, approved all of these are translated fields. And let's look at them in the actual record and here they are. So approved becomes approved and horizontal processes becomes horizontal processes but let's also have a look in another language just to make sure that everything works as described.\u003C/p>\u003Cp>And what we want to do is just run it again And here it is. Here you can see that, all of these fields have been translated to the, corresponding translations from the, directors collection, Directus translation. So the way this works, it's really simple. The operation just looks for a mustache type translation field which can be like this. So anything you want translated should go in the mustache syntax which is this here along with the closing bracket.\u003C/p>\u003Cp>So, let's make it quite big so it's visible. Let's hit save and try that again. And you can see here that our mustache syntax has been translated to the to the translation from the internal collection. It's a really simple, extension, and let's have a look under the hood. So this is the actual code for the extension.\u003C/p>\u003Cp>It's very short code as you can see. That's it. Just 79 lines of code, nothing remarkable. And you can see where the database pulls the, well the extension pulls language selected for the user from the database. And that's pretty much it.\u003C/p>\u003Cp>The rest is just for the options and it's a very simple extension. Now why did we create this? Because we have various users using our platform in a number of languages and all of these fields, would need to be translated. So we figured a very simple way to do that, which can be used and reused. And you can even use it for sending emails using the internal emailing service.\u003C/p>\u003Cp>We were considering other solutions as well, translating the fields internally through code or, just having a number of selections in all languages. But we figured that's not really viable as a solution because we are looking to expand a number of languages, and we really needed the localization for all of our all of our users. The, the challenge the biggest challenge in creating this, I think was pretty much creating the extension itself because we didn't really have experience. But using the provided guide from the director's documentation, it was actually pretty straightforward to build this, this extension. That wasn't so difficult.\u003C/p>\u003Cp>I guess it would be good to expand this to make sure that it works properly in any kind of, input. It doesn't miss any nested translations, which is very important that it does a recursive search of the translations that it actually executes. We do need to replace the choices with the actual languages from the collection. This doesn't need to be hard coded. It was just for our demo.\u003C/p>\u003Cp>And, I think this is pretty much it for something that needs to be translated. We don't really need to get into, more functionality or more detail, But if anybody would, be willing to help with expanding even just a little bit and, fixing our code just here and there, I would be grateful and, you know, you just make it available for everybody else as well. So, our add on is not yet our extension is not yet available on the marketplace, but you can download it from our GitHub repo, build it, and deploy it yourself, test it out. And if you have any comments, just open and, an issue in the GitHub and we'll see if we can, help out in resolving it. That was it.\u003C/p>\u003Cp>Thank you for watching. And I hope you can watch any other videos we'll make in the future for any of our other extensions.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you once again to Petros for taking the time to record it for us and talk us through it. We always really appreciate it. If you'd like to see more about different projects that are being built with directors, highly recommend the I made this channel on discord. It's especially great because every now and then people give us updates and so you get to see kind of as it's built along, which I think is really sweet.\u003C/p>\u003Cp>Next, we have an episode of Bobbie Tail's Little Library, which is a brand new show we've added to director's TV today, and it is a narrated storybook. So we have a short episode for you from that series.\u003C/p>\u003Cp>Speaker 7: Bobby Tail and the library construction crew, read by Catherine Steiner. Bobby Tail had a big problem. The tree library was running out of space. Books were stacked in every corner, and new stories arrived each day. We need to build a new wing, he said, adjusting his blue vest.\u003C/p>\u003Cp>But building a library wasn't like building a regular treehouse, everything needed to be perfectly organized. Binary Badger arrived first, pocket watch ticking. Before we build, he said, we need a proper blueprint. Just like a tree needs strong roots, a library needs a strong foundation.' Together, they drew plans for different rooms. 1 for storybooks, another for pictures, and a special vault for magical scrolls.\u003C/p>\u003Cp>The Raymould family popped up from their tunnels, each wearing their numbered sweaters. We'll help organize everything, they squeaked excitedly. Each book needs its special place, just like we have our numbered homes. That way, we'll always know where to find things. Lily and Luna, the loop scroll sisters, swished their tails as they tested different bridges between the library sections.\u003C/p>\u003Cp>We need magical pathways, Lily began, so everyone can find exactly what they're looking for, Luna finished. They created special rope bridges that connected every room to every other room. Daisy Debock Duck waddled in with her magnifying glass. 'Let's test everything,' she declared. She checked each bridge, each shelf, and each room.\u003C/p>\u003Cp>We must make sure every friend can find their books easily,' she explained. Marking items off her checklist with her wing. Variable goal arrived with her magical bag. Now for the special items, she announced. Together, they created cozy reading nooks, picture frame holders, and scroll cases.\u003C/p>\u003Cp>Everything had its perfect spot, ready for all kinds of woodland treasures. Finally, the new library wing was complete. Bobby Tayl stood proudly with his construction crew. The Arraymalls organized the books, the Loop sisters bridges connected everything perfectly, and Daisy Duck had tested every path. It was more than just a library, it was a magical place, where every piece of knowledge had a hole.\u003C/p>\u003Cp>This story introduces the back end concepts of data modeling, APIs, and file management.\u003C/p>\u003Cp>Speaker 0: Alright. Hopefully, you like that as much as we do. I am putting the link to the show for for the rest of the episodes. If you or anyone you know would like to check that out, we highly recommend. We also really enjoyed putting it together.\u003C/p>\u003Cp>So glad to see you're already, liking it. Someone said, just landed. What am I watching? You were watching a new director's TV episode of Bobbie Tail's Little Library. So welcome, and glad you're here.\u003C/p>\u003Cp>We have mixed up the reading list, so I'm gonna send it myself there.\u003C/p>\u003Cp>Speaker 2: We put together a reading list based on resources shared by the director's core team on things they found interesting, educational, or entertaining this month, and we'd like to share it with you now. Firstly, we have an interactive study of queuing strategies from Encore, comparing 1st in, 1st out, last in, 1st out, and priority queues on wait time, drop results, and process time outs. Next, we have an interesting approach to testing query results for different database vendors. This allows you to test identical SQL results across database drivers or dialects for the same queries in a semi automated fashion. Next, there's an interesting write up on AI assisted coding from Adi Osmani talking about the hidden cost of AI speed brought about by edge case handling, error handling, and questioning output, and how AI tools help experienced developers more than beginners.\u003C/p>\u003Cp>Lastly, this article is about making focus outlines look better. They're the glows that appear around form inputs in focus in the browser. We particularly like how there's some real world examples in this post as well. That's all from the reading list this month. As always, if you have your own reading list suggestions, we'd love you to share them in Discord with us.\u003C/p>\u003Cp>We want to take\u003C/p>\u003Cp>Speaker 0: a moment towards the end of\u003C/p>\u003Cp>Speaker 2: the changelog for thanking our community contributors, who give their time to improve the director's project. Since last month, there have been 5 releases, directors 11.2.2 to directors 11.3.2 and 7 contributors. Thank you to Robson for fixing a HTML validity issue in the table component, Alex for fixing SSO GitHub sign up for users without public emails, George for allowing the login timeout for open ID SSO login to be adjusted, Nicholas for fixing typos in relational MD, Matthew for fixing WYSIWYG file upload extension to use filename disk, Ziles for fixing specifications TS to generate required array in open API schema, and Nick for adding select all and delete buttons for notification straw. Thank you again. You can see their specific pull requests inside of the full release notes on GitHub.\u003C/p>\u003Cp>Lastly, we also want to take the time to thank our GitHub Sponsors of November who financially contribute to Directus' development. A huge thank you to Tessent, Entle, dmathams, Fergus, Omar, Marcus, c k, Peter, Utomit, Steven, Robson, nonlinear, Andrea Valentino, John, Wayne, Bjorn, Adam, Jason, Birka, Jens, Vincent, Mike, Khan, Lassie, and Wayfan. The money we are given from our GitHub Sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that.\u003C/p>\u003Cp>Speaker 0: Alright. And that was the change log for December. Thank you if you are still here for joining us along the whole way. If you randomly entered into Bobby Tales and you got very confused as to what was going on, welcome and thank you for joining us the whole way too. Any questions after this is over, please put them in Discord.\u003C/p>\u003Cp>We love hearing from you along the way as well. And if you have any 2025 changelog or not wishlist items that you'd like to see from us do let us know in discord too, as we are super interested in hearing how we can make this better and more interesting and useful for you all. It is for you after all. So if there is anything you'd like, this is actually I'd like to see this. Let us know.\u003C/p>\u003Cp>We'll no promises, but we will see what we can do. Thank you so much once again for joining us and, yeah, have a great rest of your day, your week, and your 2024, everyone. Bye.\u003C/p>","Alright. Hello. Hello, everyone. Welcome to December's version of the change log. Hope you're all having an amazing day. If you are joining us live, welcome. Let us know in the chat where you are joining us from as usual. We love to see it. We've got a really great show for you today. We have the usual product and extension updates. We've got the year in review for you, a community showcase, and a new show that we launched on director's TV today. So stick around if you are able to. We'd love to be able to chat with you along the way. Hello, everyone. So great for joining. Hello. Hello. Yeah. Let us know in the chat if you are joining. Oh, Canada. Hello. Welcome. Morning time, early morning time. Welcome. Glad for you to be joining us. Florida, super exciting. Much more exciting than London, personally. I think so at least. But, yeah, great to have you all here with us. So I'm kicking off with Alex who's gonna take you through the product updates for December. Hey, folks. Alex here, director of web engineering, and I'm going to be taking you through the core updates that have happened since the last changelog. There's been a few releases, but here are the notable things to be aware of. In 11.2.2, we made s three connection settings configurable via environment variables. This includes things like connection timeout. In 11.3.0, we introduced new retention settings for activities, revisions, and flow logs. These 3 system tables can become quite large, and now you can change how long they will be kept for being preened. Earlier this year, we committed to providing security updates to Directus 10 until the end of the year. Make sure you upgrade to 10.13.4 if you're still on the version 10 family. The same patch has been included in the Directus 11 patch as well. That's all for me. Handing back over to Beth now. I'm going to demonstrate each of the extensions new in Directors Labs this month. As a reminder, Directors Labs is our team's experimental org in GitHub, which regularly publishes new extensions. Here's a demo project to showcase what's new. The address completion interface integrates Google Places auto complete data API directly into the director's editor. This improves data quality and stores data in a standard GeoJSON feature format. It also enhances user experience by speeding up address entry. You can swap between map tiles or, when setting up the interface, skip the map altogether. The tour group interface is one we are super excited about. You can set up guided tours around director's editor to help your content authors better understand your configuration. You can set up multiple with their own labels, but we've set up one here to demonstrate. As you see, it's a multi step tour which moves between any of the interfaces in the UI. If we go to the interface settings, here, you can see it's a group interface, so items which are children can be included in the tour. You can add any number of tour steps. We have to first specify any element to select. This extension injects a couple of classes for each field, one for the whole field including label and one just for the output. You can specify a title and description and other metadata for display. This is gonna be so helpful when handing off your data project to end users. This is a choropleth panel. You've likely seen something like this before where countries are highlighted more intensely based on the higher values. Here, we have a views collection and a field called country, which contains a 2 letter ISO code. You can also use 3 letter or m 49 country codes. Like many other panels, pick an aggregated field and function. Here, we are counting the number of items with the country. We think this will be useful for understanding visitors and customer data based on country. The HubSpot API operation provides a way to interact directly with the Hub Spot API from Directors Automate. Once you provide your API key with correct access, you can interact with a load of endpoints like contacts, deals, and emails. Once you select an endpoint, you have a number of suitable actions available. Here, you can create, read, update, delete, or list your contacts. So this could be used to update a record whenever data changes in Directus, for example. We're really happy to be offering this extension to speed up integrations with your existing data sources. Alright and I have just now put the link to check out all the extensions in the chat so if you are excited, as we hope you are, about those extensions do let us know, check them out yourself. Before I put us over to the year in review, I do also want to shout out a new project Brian has created called salty open source Santa. You write a letter to Santa including your GitHub username and Santa tells you if you are on the naughty or nice list. It's all in good fun but I also am really excited that Bryant has put through a blog post and a video talking through how he created the project as well. It's well worth checking out, so I will also include the links to those in the chat as well. Right now, I'm sending you over to Wrike to kick us off for the 2024 director's year in review. Welcome to our 2024 recap where we walk through all of the cool and exciting things we added to Directus this year. I'm Reik, the CTO and cofounder of Directus. I'm going to be kicking this off by taking you through what we shipped in new releases to the core Directus project. Seeing that we shipped over a 1,000 things, I won't be listing all of them, but here's the top ones. Opening with a small but impactful feature, we added vocal point support, which allows you to set a vocal point coordinate via the API or the data studio when you're cropping images. That way you can ensure that the important parts of your image remain visible no matter what sizes you're generating in the API. In March, we released the beta of the marketplace, launching our extensions registry, enabling the distribution and installation of extensions in any Directus project. This was also a great way for us to be able to ship new features via extensions, which Beth will talk about later. We also brought upgrades to content versioning and live preview so you can check out what content will look like in your project without needing to publish it to the API. In version 10 dot 11, we introduced public registration, simplifying the process of allowing any user to create new accounts. This is available both in the Studio and via our new registration and verification APIs. To further extend public registration, we also introduced configurable user limits so you can control the number of users in your project, giving you more control over how your project runs. Over the summer, we released a new major version of Directus version 11. This introduced policies, changing the way you can compose access control throughout your project. We also used this opportunity to announce our first ever extended security update period for a version of Directus for those who weren't quite ready to migrate to the new version yet. In your project settings, you can now also find streaming system logs inside of the data studio for greater visibility into what's going on in your API and debug any problems along the way. For more information on this or any of the other things I just mentioned, do check out the detailed release notes on GitHub. Next up, we have Kevin taking you through our cloud recap. Thanks, Reich. Now I have the pleasure of recapping everything that's happened this year for directors cloud. If you've not heard of it, directors cloud is the way to host directors projects managed by the team who build it. You, of course, can still self host Directus, and we make that as easy as possible. But if you want hardware maintenance, upgrades and migrations, and storage handled, Directus Cloud is for you. We provision a database, asset storage, caching, and more. Just a few button presses in the cloud dashboard, and you're ready to go. Now 2024 added a lot of requested features and capabilities to Directus Cloud. Probably the biggest change is to our pricing and the introduction of our new starter tier. This lowers the barrier even more to getting started, and it starts at just $15 a month. Remember, that's not only Directus, but a database, asset storage, caching, and all of the work required to keep an application online and secure. We also introduced a new self serve business tier that sits above our existing professional tier, but for customers who aren't quite ready for enterprise. This year, we also introduced auto scaling to cloud projects to make sure they always stay online. There was actually a significant amount of infrastructure work in the background to enable all of these changes, so shout out to our infra team for making it happen. In Director's Cloud, you can now add custom domains and set advanced project configuration that allows the editing of key environment variables. This is a big deal. It was one of the key pieces of feedback we had from cloud customers, and we're happy to have addressed it. We've picked important variables and a safe kind of pre picked allowed values to ensure that all projects on directors cloud continue to run smoothly. But if you want to see more, just reach out and let us know what you'd like to see. Lastly, we hear that launching a directors project for the first time can be a bit daunting, as you have a powerful but ultimately blank canvas to set up. When you set up a cloud project, we now offer the ability to set it up with one of our cloud templates, one for CMS, one for CRM, and one for ecommerce use cases. That's a lot of new stuff in Director's Cloud this year. Now we're reaching the end of the year, and quite frankly, I need a nap. So I'm gonna kick it back over to Beth to talk to you about all of the new extensions we shipped in 2024. Thank you so much for coming with me on this journey this year, and I'll see you next time. Bye for now. Thanks, Kevin. Hello again, everyone. In every change log we have, we talk through the new extensions we release. There've been quite a few, so I'm here to take you through a short recap of some of our favorites. Starting off with directors dotai. Directors dotai is a group of 11 AI based extensions, which brought new capabilities to directors automate. We've integrated with best in class AI platforms to allow you to transcribe audio, generate images, write text, and scrape web pages. There's a whole lot in Director's AI, and we have a whole series on Directus TV to talk you through each of the extensions. We've added a bunch of new interfaces for Directus Editor. Rich interfaces for video, audio, PDF files, and address auto completion Collaborate with our new whiteboard and Wherebycalls interfaces Allow users to navigate multi selections via API with the multi level Autocomplete API interface One of our most upvoted feature requests, calculated fields, is also now available as an interface It supports loads of functions and dynamic data from your items. And our new tool group, releasing today, allows you to create guided tools around the editor to support your content authors. We've added some really powerful new layouts. The spreadsheet layout and the Gantt chart layout. Directors Insights has also received lots of love with a load of new panels, a more detailed table that you can drop in, Lots of new charts: scatterplot, funnel, tree map, timeline, and a choropleth map. And a new flow trigger panel, so you can execute automations directly from your dashboards. Finally, new service integrations. As well as Whereby Video calls that we mentioned earlier, we now have integrations with Flausible Analytics, resend's email service, and the HubSpot CRM. Moving away from extensions, I also want to briefly talk about templates, which is something we've also added this year that can help you get building with directors faster. This year, we launched a template directory, with templates built by both our core team and community members. Currently, there are templates for building a content management system, a customer relationship manager, an ecommerce store, an agency operating system, an event operating system, and an adventure business kit comprising a website, blog, and CMS. These are all available to browse on directors. Io / templates. I'm gonna hand over to Carmen now for taking you through the content recap. Thanks, Beth. I'm Carmen, developer educator here at Directus. This time last year, we launched Directus TV. Between then and now, we've added over 250 episodes across nearly 40 shows. A huge amount of entertaining and educational resources. Some highlights from this year include new seasons of 100 Apps in 100 Hours where Bryant races against the clock to create his own versions of a customer relationship manager, a remote job board, and a social media platform to name only a few. A new season of Trace Talks from John and Pedro interviewing senior engineering leaders such as David Zimmer from Netflix and Dana Lawson at Netlify on their journeys and experiences in the tech industry. Also, a new season of Short Hops continuing to take you through quick ways of getting more from Directus, the 20 24 episodes, including transformation presets, focal points, and version control. We've also launched many new shows including what's in your dock, where we ask guests to show us their most used hardware and software, Ready, Set, Battlesnake, where Andrew and Kevin build a capable snake inside of a Directus project. As well as the joy of theming where Bry Ross shows how to make theming masterpieces. Democratizing data got to grips with using open data and Directus to build new applications around data like the trees of London and meteorite landings. Bridging Bytes brought together technology leaders to discuss the future of sustainable open source and how agencies innovate. Enter the workshop, invited friends from Twilio and Deepgram to build extensions live on air. And my new show, Sharp Focus, hosted by me as I show you how to use image transformation as part of Directus files. Keep an eye out for this and many new shows at directus.i0/tv. This year, we've also published over 50 new tutorials to help you get the most from Directus. We've published getting started guides for Sveltekit, ASTRO, Next, Nuxt, and more. Developers in other languages, we got you. There's loads including posts for Django and Flask devs, those who use Flutter, Kotlin, and Swift, and for the Laravel community too. You can now find loads of Directus automate tutorials showed how to integrate with Clarify's image recognition APIs, GitHub and OpenAPI. We believe you should be able to host Directus anywhere. So we wrote new content to help you deploy Directus on Azure, Google Cloud Platform, and AWS. There are some really cool project write ups as well, including building ecommerce projects with Stripe integrations, using Directus as a baby health monitor with Opsgenie, and building event registration systems. We also have new migration posts, including one for WordPress and integration with different indexing systems like Algolia and Elasticsearch. This is not all and we encourage you to take a look at our tutorials in our docs to explore our whole collection. That's all for me. We hope you've enjoyed this recap. And as always, if you've got any questions, let us know on Discord. Alright. So that was a recap of some of the highlights for 2024. Whether you have been with us the whole year or you are new to directors this year, we'd love to hear what your year has looked like with directors, whether anything has changed, whether you've brought in anything new that we've talked about. But, yeah, it's been great to spend a second to just look back rather than constantly looking forward, and put together the year in review for you all. So we hope you enjoyed it. Next up is my personal favorite. I say this every month and every month it is true. It is the community showcase, and this month, we have Petrus Diaz talking through the universal translate flow operation. Hi, everyone. My name is Petros Diaz, and I'm here to demo, Directus flow operation extension that we've built called a universal translator. And the main task of the universal translators is to translate anything that you throw at it, be it a string or a JSON object or an array. Let's have a quick look of how that works. You just place the universal translator within your flow and the only thing you need to do is provide the input translate which can be a direct string or a variable and choose the language which can be based on the user language that the user has selected, or you can choose from the drop down. We haven't included the entire language collection here, which we can do so in the future. Let's just leave it to auto for now. And just let's, let's run it real quick so you can see the results. I have a ready made flow here. So this flow creates a PDF, for the user in the language they've selected. And let's have a look at the result. Here it is. So you can't really tell which are the translated fields here but status, author, process, location, approved all of these are translated fields. And let's look at them in the actual record and here they are. So approved becomes approved and horizontal processes becomes horizontal processes but let's also have a look in another language just to make sure that everything works as described. And what we want to do is just run it again And here it is. Here you can see that, all of these fields have been translated to the, corresponding translations from the, directors collection, Directus translation. So the way this works, it's really simple. The operation just looks for a mustache type translation field which can be like this. So anything you want translated should go in the mustache syntax which is this here along with the closing bracket. So, let's make it quite big so it's visible. Let's hit save and try that again. And you can see here that our mustache syntax has been translated to the to the translation from the internal collection. It's a really simple, extension, and let's have a look under the hood. So this is the actual code for the extension. It's very short code as you can see. That's it. Just 79 lines of code, nothing remarkable. And you can see where the database pulls the, well the extension pulls language selected for the user from the database. And that's pretty much it. The rest is just for the options and it's a very simple extension. Now why did we create this? Because we have various users using our platform in a number of languages and all of these fields, would need to be translated. So we figured a very simple way to do that, which can be used and reused. And you can even use it for sending emails using the internal emailing service. We were considering other solutions as well, translating the fields internally through code or, just having a number of selections in all languages. But we figured that's not really viable as a solution because we are looking to expand a number of languages, and we really needed the localization for all of our all of our users. The, the challenge the biggest challenge in creating this, I think was pretty much creating the extension itself because we didn't really have experience. But using the provided guide from the director's documentation, it was actually pretty straightforward to build this, this extension. That wasn't so difficult. I guess it would be good to expand this to make sure that it works properly in any kind of, input. It doesn't miss any nested translations, which is very important that it does a recursive search of the translations that it actually executes. We do need to replace the choices with the actual languages from the collection. This doesn't need to be hard coded. It was just for our demo. And, I think this is pretty much it for something that needs to be translated. We don't really need to get into, more functionality or more detail, But if anybody would, be willing to help with expanding even just a little bit and, fixing our code just here and there, I would be grateful and, you know, you just make it available for everybody else as well. So, our add on is not yet our extension is not yet available on the marketplace, but you can download it from our GitHub repo, build it, and deploy it yourself, test it out. And if you have any comments, just open and, an issue in the GitHub and we'll see if we can, help out in resolving it. That was it. Thank you for watching. And I hope you can watch any other videos we'll make in the future for any of our other extensions. Alright. Thank you once again to Petros for taking the time to record it for us and talk us through it. We always really appreciate it. If you'd like to see more about different projects that are being built with directors, highly recommend the I made this channel on discord. It's especially great because every now and then people give us updates and so you get to see kind of as it's built along, which I think is really sweet. Next, we have an episode of Bobbie Tail's Little Library, which is a brand new show we've added to director's TV today, and it is a narrated storybook. So we have a short episode for you from that series. Bobby Tail and the library construction crew, read by Catherine Steiner. Bobby Tail had a big problem. The tree library was running out of space. Books were stacked in every corner, and new stories arrived each day. We need to build a new wing, he said, adjusting his blue vest. But building a library wasn't like building a regular treehouse, everything needed to be perfectly organized. Binary Badger arrived first, pocket watch ticking. Before we build, he said, we need a proper blueprint. Just like a tree needs strong roots, a library needs a strong foundation.' Together, they drew plans for different rooms. 1 for storybooks, another for pictures, and a special vault for magical scrolls. The Raymould family popped up from their tunnels, each wearing their numbered sweaters. We'll help organize everything, they squeaked excitedly. Each book needs its special place, just like we have our numbered homes. That way, we'll always know where to find things. Lily and Luna, the loop scroll sisters, swished their tails as they tested different bridges between the library sections. We need magical pathways, Lily began, so everyone can find exactly what they're looking for, Luna finished. They created special rope bridges that connected every room to every other room. Daisy Debock Duck waddled in with her magnifying glass. 'Let's test everything,' she declared. She checked each bridge, each shelf, and each room. We must make sure every friend can find their books easily,' she explained. Marking items off her checklist with her wing. Variable goal arrived with her magical bag. Now for the special items, she announced. Together, they created cozy reading nooks, picture frame holders, and scroll cases. Everything had its perfect spot, ready for all kinds of woodland treasures. Finally, the new library wing was complete. Bobby Tayl stood proudly with his construction crew. The Arraymalls organized the books, the Loop sisters bridges connected everything perfectly, and Daisy Duck had tested every path. It was more than just a library, it was a magical place, where every piece of knowledge had a hole. This story introduces the back end concepts of data modeling, APIs, and file management. Alright. Hopefully, you like that as much as we do. I am putting the link to the show for for the rest of the episodes. If you or anyone you know would like to check that out, we highly recommend. We also really enjoyed putting it together. So glad to see you're already, liking it. Someone said, just landed. What am I watching? You were watching a new director's TV episode of Bobbie Tail's Little Library. So welcome, and glad you're here. We have mixed up the reading list, so I'm gonna send it myself there. We put together a reading list based on resources shared by the director's core team on things they found interesting, educational, or entertaining this month, and we'd like to share it with you now. Firstly, we have an interactive study of queuing strategies from Encore, comparing 1st in, 1st out, last in, 1st out, and priority queues on wait time, drop results, and process time outs. Next, we have an interesting approach to testing query results for different database vendors. This allows you to test identical SQL results across database drivers or dialects for the same queries in a semi automated fashion. Next, there's an interesting write up on AI assisted coding from Adi Osmani talking about the hidden cost of AI speed brought about by edge case handling, error handling, and questioning output, and how AI tools help experienced developers more than beginners. Lastly, this article is about making focus outlines look better. They're the glows that appear around form inputs in focus in the browser. We particularly like how there's some real world examples in this post as well. That's all from the reading list this month. As always, if you have your own reading list suggestions, we'd love you to share them in Discord with us. We want to take a moment towards the end of the changelog for thanking our community contributors, who give their time to improve the director's project. Since last month, there have been 5 releases, directors 11.2.2 to directors 11.3.2 and 7 contributors. Thank you to Robson for fixing a HTML validity issue in the table component, Alex for fixing SSO GitHub sign up for users without public emails, George for allowing the login timeout for open ID SSO login to be adjusted, Nicholas for fixing typos in relational MD, Matthew for fixing WYSIWYG file upload extension to use filename disk, Ziles for fixing specifications TS to generate required array in open API schema, and Nick for adding select all and delete buttons for notification straw. Thank you again. You can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of November who financially contribute to Directus' development. A huge thank you to Tessent, Entle, dmathams, Fergus, Omar, Marcus, c k, Peter, Utomit, Steven, Robson, nonlinear, Andrea Valentino, John, Wayne, Bjorn, Adam, Jason, Birka, Jens, Vincent, Mike, Khan, Lassie, and Wayfan. The money we are given from our GitHub Sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. And that was the change log for December. Thank you if you are still here for joining us along the whole way. If you randomly entered into Bobby Tales and you got very confused as to what was going on, welcome and thank you for joining us the whole way too. Any questions after this is over, please put them in Discord. We love hearing from you along the way as well. And if you have any 2025 changelog or not wishlist items that you'd like to see from us do let us know in discord too, as we are super interested in hearing how we can make this better and more interesting and useful for you all. It is for you after all. So if there is anything you'd like, this is actually I'd like to see this. Let us know. We'll no promises, but we will see what we can do. Thank you so much once again for joining us and, yeah, have a great rest of your day, your week, and your 2024, everyone. Bye.","01804104-119d-470b-b225-e6a8d5d2d2a0",[250,251,252,253,254],"d7f68adc-7027-4475-aa53-55f8d0342b44","ad08e78f-597e-4ba7-9fab-ad8e0d47a247","0af255dc-eb15-47a1-911e-f2b51d47848b","6913fad7-24b4-4c51-9f90-963969ce745d","69391df2-bd67-4f9f-8d6a-4fce37455245",[],{"id":152,"number":153,"show":122,"year":154,"episodes":257},[156,157,158,159,160],{"id":143,"slug":259,"vimeo_id":260,"description":261,"tile":262,"length":263,"resources":8,"people":8,"episode_number":264,"published":265,"title":266,"video_transcript_html":267,"video_transcript_text":268,"content":8,"seo":269,"status":130,"episode_people":270,"recommendations":275,"season":276},"january-2025","1048503294","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes a documentation update, a community showcase from Shruti showing a real estate app, a salty santa recap from Bryant and an episode of a new show on Directus TV called Authentication Avenue.","6749d6aa-31b7-46bf-bfc1-74509a42440d",36,6,"2025-01-23","January 2025","\u003Cp>Speaker 0: Hello everyone and welcome to the first change log of 2025. I hope you're all having an amazing start to your new year. You deserve it. As usual if you are joining us live do let us know in the chat where you're joining us from. We love to see, all the different places people are tuning in from.\u003C/p>\u003Cp>We have a really great show for you planned for today. We have a docs update from Carmen, a salty Santa recap from Bryant, a community showcase of a real estate app, and a new director's TV show based on authentication. So do stick around if you are able. Any questions in the meantime, let us know in the chat, and we'll, aim to help you. And I am going to start today off by sending you over to Kevin who will be giving you a product update.\u003C/p>\u003Cp>Speaker 1: Hey, everyone. Kevin here to tell you about what we've shipped in Directus in the last month or so, including our latest release last week, 11.4. Recent releases have included a lot of small optimizations, improvements, and bug fixes, but here's the highlights. It's only January. There's already a lot to talk about, so let's jump straight in.\u003C/p>\u003Cp>We finally support new versions of Node. Js, upgrading our runtime version to Node 22. We had some dependencies that we weren't sure were compatible beyond Node 18, but we've checked and resolved all known issues so you can continue to run directives on current long term support versions of Node. We've also added the ability to toggle translation interface items to make them deletable while ensuring things like defaults, conditions, and validations continue to work as expected. This is a really nice quality of life improvement for projects with multilingual content.\u003C/p>\u003Cp>Our Kanban layout has also received an update, now allowing you to use relational data in titles that appear on the front of cards. Version 11.3.5 and 11.4.0 have introduced a new language, Murathi, and got it all the way to a 100% coverage. This makes it the 30th language with 70% coverage or higher with over 2 thirds of those over 90%. We've also added activity tracking for field deletion, which is really useful for both accountability and visibility into what has changed in your project. You can continue to find the activity log at the bottom of your sidebar on the right hand side of the data studio.\u003C/p>\u003Cp>And finally, one for extension authors and a first contribution from our new core engineer, Mike. The latest version of the CLI that ships with the director's extensions SDK has a new validate command that performs common checks to determine that your extension will run and has key qualities that we look for. In future, we're planning to tie this to the marketplace, But for now, it's a lovely local convenience tool to help you ship better extensions. You can run it now with npx create directors extension validate. And that's all from me.\u003C/p>\u003Cp>Lots of updates to talk about. I'm gonna kick it back over to Beth, and I'll see you next time. Bye for now.\u003C/p>\u003Cp>Speaker 0: I'm going to demonstrate each of the new extensions in Directors Labs this month. As a reminder, Directors Labs is our team's experimental org on GitHub, which regularly publishes new extensions. Firstly, we have the tree view table layout which when selected from the layout options we have the option to select the parent. Here we have team members' names, who they report to, and whether or not they are warm enough at their desks. Having selected the tree view table as the layout option, we can now drag and select who reports to who out of the list of team member names.\u003C/p>\u003Cp>This then is reflected in, for example, Jack having the team members Astrid and Kate. The card select interface shown here with that information about records, adds image card select interfaces for single and multi selected use cases. You also have the ability to add via search and you can use inline SVGs via copy and paste, icons from material symbols library, or an image for the card select. Once selected these are reflected in the raw value. Another new extension is the switch interface which provides a nice alternative to the toggle interface which is default.\u003C/p>\u003Cp>Another part of this is the optional description you can add to the field. Here if we go into the interface we can add a description of 'wow, an optional description, how helpful' and once saved that will be back into the switch interface. Lastly, we have the super header interface which is a really nice way of adding more context along with actions. Here we've got information about a concert and we've got the venue and we want to change the superheader into something a bit more contextually helpful. So, if we go in to the super header title, we can alter the title to be 'location', we can add an icon, so because it's a location I think the pin makes more sense and we can choose a color using the colour picker, RVDB or HSL.\u003C/p>\u003Cp>I'm just going to pre select blue. You can also have a subtitle, so this is where the concert is' and we can add in helpful information to guide users so entry details will be given on the 1st of Feb. We also have the ability to add the action and that is a flow or a link. For this, I am going to say that when the button is clicked, I want us to navigate to search of concert venues. This extension gives the ability to use route level fields as variables in title subtitle or link URL and once we have changed that you can see that the super header has changed to show location and provide more context if it's needed.\u003C/p>\u003Cp>Speaker 2: Hey. What's up, changelog crew? Bryant here from Directus, and I just wanted to walk you through the salty open source Santa. Alright. This is probably more of a recap seeing as Christmas is now over, but, this was a fun little app, and you may get some use out of it as well.\u003C/p>\u003Cp>So Salty Open Source Santa is a Nuxt and Directus application that, basically, is the open source naughty or nice list. So you log in to GitHub, write a letter to Santa, or you can also write a letter to Santa on behalf of a friend or colleague. But, basically, we write a letter to Santa. Santa then checks your GitHub profile to see your open source contributions for the year. So behind the scenes, we're calling the GitHub API, actually using the GraphQL API.\u003C/p>\u003Cp>We get your contributions, your commits, your pull requests, your reviews that you've given on pull requests, if you've sponsored anybody. And we put all that through a scoring algorithm and determine whether you are on the naughty or nice list. And then regardless, Santa writes you a roast style letter back. You can see Santa is particularly rough on me here. Been watching you, Brian, and let me tell you, your GitHub profile is about as impressive as a melted snowman.\u003C/p>\u003Cp>So some of these takes are spicy. Some of them are a little more tame, but, lots of cool little features built into this application. One of them is the spiciness meter here. So, this is just how we determine whether a take or a roast letter is particularly spicy. And, if we take a look at Santa's list, we could see the spiciness level of each one of these.\u003C/p>\u003Cp>So we've got a 155 folks on the naughty list, 70 on the nice list. So that's kind of, in place of a like button. You could actually roast users or organizations with this thing. And then one of the other really fun bits that we we included in this, we're using 11 Labs here to actually read the letter to you from Santa. So you can have Santa read this out loud to you, which is awesome.\u003C/p>\u003Cp>A member of the core team, Pedro Pizarro, has got real chops for voice over. He's a musician as well, but he sent us the sample. We cloned the voice very quickly inside 11 Labs, and it calls their API and actually generates this for you. So if you want to check out this application, if you want to remix it yourself, go to the Directus Labs repository, look for the OS Santa repo sorry, the Directus Labs organization, and look for the OS Santa repo. You can see the full source code here.\u003C/p>\u003Cp>Everything is MIT licensed, so feel free to grab it, do whatever you want with it. Hopefully, it's helpful in your own applications. I know I had a lot of fun building it, and we got some great feedback from a lot of folks around Christmas time. So that's it for me. Back to you guys.\u003C/p>\u003Cp>Speaker 0: Alright. Hopefully, you are, excited to try that out for yourself if you haven't already. We have added all of the links to the various things mentioned in the chat, so do try it out and let us know what something says about you. Hopefully, you're on the nice list. Next up, we have Carmen with a documentation update and I believe Carmen's in the chat as well, so if you do have any questions whilst they're talking through, let us know, and we'll do the best to, have a chat with you there as well.\u003C/p>\u003Cp>Speaker 3: Hey, everyone. My name is Carmen. I'm a developer educator at Directus and part of my role is documentation. Over the last few weeks, we went ahead and launched our brand new documentation platform rebuilt from the ground up. And I am so excited to walk you through the new structure and also tell you about our motivations.\u003C/p>\u003Cp>So let's talk about content. We've been building our documentation content over several years, starting from a minimal set of requirements. It's seen a lot of input, and we wanted to take this opportunity to consolidate everything into one voice. So, every word, every sentence, every paragraph has been looked over carefully, adapted, or rewritten. This has been a group effort, not just by myself, but other educators at Directus.\u003C/p>\u003Cp>As for structure, we've also carefully considered how to best lead the reader towards what they need. On the new homepage, the first thing you'll see is how to get up and running with Directus as quickly as possible with a demo. Moving lower down, you'll find a full fledged guide on getting started using Directus as well as a link to our Directus Academy video series. Let's go over our new start section. We've assembled a set of short essentials for running a Directus project from creating your data model to authentication to using real time data.\u003C/p>\u003Cp>Next, I wanna show you how we've created detailed reference guides for using each of Directus' features. For example, if you need to configure authentication on your Directus project, you'll find everything you need here. Our API reference has also seen a major overhaul. It's now directly generated from our new open API specification. This is fully open source.\u003C/p>\u003Cp>So, if you find anything, please feel free to open a pull request. We've also added a section dedicated to using Directus Cloud. How to self host your Directus project and finally restructured our configuration documentation to make your project much easier to configure. Over in resources, we've added a dedicated community section where you can find our contribution, authoring, and documenting guidelines. You'll also find our community maintained tooling.\u003C/p>\u003Cp>If you're working on an open source tooling for Directus, please let us know so we can add it to this section on the home page. Any release changes to Directus are logged here as well. So, keep an eye out for those as they come in. Finally, we're bringing in a set of tutorials to work with Directus. If you're looking to fetch data from Directus using a specific framework, how to build specific projects with Directus, some advanced tips and tricks, migrating from other platforms to Directus, or building your very own extensions, you'll find it all here.\u003C/p>\u003Cp>And there's more coming, so stay tuned. As you can see, a lot has changed and for the better, we think. You'll find this new documentation platform over at directus. Iodocs. This is an ongoing project on our end and I'd love to ask you to please have a look over the new documentation, give us feedback, and tell us what we can do to improve.\u003C/p>\u003Cp>You'll find a little feedback widget on every page and our team will read all of your feedback. You can also open issues in our new directus/docs repository on GitHub. Well, that's it for me. Thank you so much for listening, and I'll see you soon.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you so much, Carmen. That is all looking great. And as mentioned before, if you've got any questions, do let us know. Next up, and I do say this every month, but it remains to be true, is my favorite segment of the show.\u003C/p>\u003Cp>We have the community showcase. And this month, we have Shruti Kapoor building a real estate app. So sending over to Shruti.\u003C/p>\u003Cp>Speaker 4: Hi, everyone. My name is Shruti Kapoor, and I'm going to do a quick demo for you to show you what I built with Directus. I'm a staff engineer currently working at Slack, and I love making coding tutorials for folks and help them get into front end. You can find all of my content up on YouTube at shruti kapoor 08. Now let's get into the demo.\u003C/p>\u003Cp>Here's a demo of an app that I built with Directus, OpenAI, Landchain, Node. Js, React, and Tailwind. It's a lot of stack, but let me simplify this demo for you. So here's a place where we can search for properties. I built this pro I built this app when I was looking for real estate in Seattle, and I was sick of entering fields in Zillow and having to manually type all of the things over and over again.\u003C/p>\u003Cp>So here's an app that I built. In this app, you can simply write an English language sentence like, I am looking for a 4 bedroom house with backyard, swimming pool, front yard, nice school district in the range of 2,000,000, 2,000,000, how many zeros are there in 1,000,000? 25,000,000. Let's just say I have this money. And if I hit search, that's all I have to do to look for a house and it's gonna magically look up for houses that match that preference in Seattle.\u003C/p>\u003Cp>So this is what I built. Also, this is also the starting point of building a recommendation engine. I built this like and dislike button. So next so let's say that I want to build a recommendation engine where I want to see more properties that match the preferences that I like. I can hit like on a property like this one, which I feel like is very pretty, or this one, which I feel like is too crowded.\u003C/p>\u003Cp>So I'm gonna dislike this. And now if I head over to my director's database, give it a reload, and see at the bottom that this property, 320 Northwest 75th Street, which was at 805, is marked as disliked in my database. And that's the grounds of setting up a recommendation engine. I can use the preferences that I set, yes or no, to build a recommendation engine that values the properties that I've already liked and tries to show you more properties like that, which will be the next part of this demo. By the way, I'll walk through this code very briefly to show you how I'm integrating with OpenAI.\u003C/p>\u003Cp>But if you're interested in a detailed walk through of this app, here is a video I've built on my channel which you can watch, Building an AI powered real estate app. But for now, let me show you how I integrate with LMM. So I've got this file called llm. Js, and this is all I'm providing my LMM. Okay?\u003C/p>\u003Cp>K. I'm creating an open AI, NLM, just providing it my API key. Then I'm setting a parser. I'm using the structured output parser and giving it a ZOD object that I want to create. The ZOD object that I want to create is price ending, which is gonna be a budget, which provides us a budget range of what my property should be, number of bedrooms for the house that I'm looking for, number of bathrooms.\u003C/p>\u003Cp>I can also provide a default value. For example, 1, if no bathroom was provided and a nice to have, which in my case would be backyard, swimming pool, front yard, front yard, nice school district, things like that. And, again, I can provide if there is nothing provided, return backyard because that's the kind of person I am. I love backyard. That's all I need to create is that object.\u003C/p>\u003Cp>And with this parser, I can then invoke my chain, which is how I call LLM. I'm gonna provide it a template. I'm gonna say, parse the description provided by user, and that is the text that I'm entering here at the top. And I'm gonna say pass the description provided by the user to extract information about real estate preferences. Which information?\u003C/p>\u003Cp>Exactly this information that I'm defining up here. And then all I need to do is invoke my chain with the description that the user has provided and the format instructions that I just generated over here. And that's how you call LLM. I'm saving all of this data in the database, which is direct us, and this will be helpful in creating a recommendation engine in the future. I can also save all of the properties that I've liked in the database.\u003C/p>\u003Cp>Thank you for watching my demo.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you so much once again to Shruti for that, and I will post the link to her full video shortly. We have a new Directors TV episode next. It came out today. It's one of 5 episodes focused on authentication.\u003C/p>\u003Cp>So we're going to send in the authentication avenue next.\u003C/p>\u003Cp>Speaker 1: Hey there, developers, and welcome to authentication avenue. Ever wonder how your favorite apps know it's really you trying to log in? Well, today we're diving into authentication, the digital world's way of checking your ID. Let's imagine we're at our local library. When you want to borrow books, you need a library card.\u003C/p>\u003Cp>But getting that card isn't as simple as just walking in and saying, hey, I'm Kevin. Here's what actually happens. 1st, you fill out an application with your information. That's you claiming who you are. Then you show your ID or proof of address.\u003C/p>\u003Cp>That's you proving that you are really you. And only after verifying your identity does the librarian give you your very own library card. Now, every time you come back to borrow books, you show that library card. The librarian can check their system and confirm it's a valid card that actually belongs to you. And that's exactly how authentication works in the digital world.\u003C/p>\u003Cp>When you log in to your favorite app, you don't just type in your email and poof, you're in. Just like at the library, you need something to prove it's really you with something only you would know, your password. Now in the developer world, authentication is like that library card system. When users try to access their private data or personal settings, authentication verifies their identity using something they know, like their password, something they have, like their phone or verification codes, or something they are like their fingerprint. We call all of these authentication factors, and they're the digital equivalent of that library card and ID check.\u003C/p>\u003Cp>Now, once you've proven who you are, you need a way to show it with each request, like carrying your library card. In the digital world, we have a few ways of doing this. Most commonly, you will use what is known as a bearer token. It's like carrying an ID card that says, I've already proved who I am. You include this token in a special part of your request called the header.\u003C/p>\u003Cp>Or you might use cookies. These are like invisible name tags that your browser automatically shows to websites you've logged into before. Super convenient. And while you technically can include your credentials as query parameters in a URL, for example, example.com/, or question mark token equals 12345, we don't really recommend this because sometimes URLs can be logged. And that's like writing your password on a sticky note where anyone can see it.\u003C/p>\u003Cp>So remember, authentication isn't just about saying who you are but it's about proving it. Next up, we'll see how this works in practice with Directus, but first, let's return our library card. Here we have a posts collection in a Directus project, but this collection is not publicly accessible, so we will need to authenticate as a user with the requisite permissions in order to access this data. And we see here when we just try and access it, when we try and list the posts, that we get an error. You don't have permission to access the collection posts or it does not exist, which is correct because it doesn't know who we are.\u003C/p>\u003Cp>We have not authenticated. Now as mentioned, there's a few ways to authenticate. One of the most common is by passing in what is known as an authorization header. So the headers get sent along with our request. The value is bearer, space, and then a valid access token of a user that has permissions.\u003C/p>\u003Cp>And when we hit send, we will get this data back. As I mentioned, there is also another way of doing this, which is via a query parameter to your request. So you can include access token equals value, and, again, that will successfully authenticate. The reason I'm showing you this is to actually dissuade you from using this approach because this full URL, you can type it in your browser here, will return data, but this full URL, including your access token, could be logged by your browser history, by your browser extensions, by your Internet service provider, your corporate VPN provider, and so on. And so to keep it secure, we tend to not use this approach too much.\u003C/p>\u003Cp>I do also wanna show you how to get an access token and authenticate using the Directus SDK. So here we have just a JavaScript file. We are initializing a new Directus SDK instance, and what we're going to do is import the authentication composable. And then we are going to initialize the client with the composable. This gives us a brand new function.\u003C/p>\u003Cp>We can now type in directus dot login and provide our email and our password, these values here. And this client will now be authenticated. So now we can go ahead and actually query our post's data. Let's import rest and read items, which we'll need to make this request, and add the rest composable to our client. And now we can go ahead and make a query, directors dot request read items posts.\u003C/p>\u003Cp>And then we'll console log the items, and this line here, specifically, is what is authenticating us. Let's see if that works, and we should see, promise pending. Absolutely. We just need to put in await there, and we will now see that once the data is returned, it is displayed here. So this is how we authenticate using the SDK.\u003C/p>\u003Cp>Join me in the next episode of authentication avenue where we will cover a brand new topic.\u003C/p>\u003Cp>Speaker 0: We want to take a moment towards the end of the changelog for thanking our community contributors who give their time to develop the Directors Project. Since last month, there have been 16 contributors. A huge thank you to Johannes for adding ability to map OIDC groups to OIDC roles, Junhong for ensuring floating view will not scroll top after route change and adding internationalization to rich text editor toolbar, Dominic for fixing the alignment of the 'select all' checkbox in the notifications drawer, and adding system argument for the clear cache function in the SDK, Robson for enhancing vertical alignment of SSO icons on login page, Osman for fixing an issue with unintentional sorting after editing items in relational interfaces, Gavelium for improving the default user created display template by using the avatar field, Gloria for increasing raw editor max height, Nick for adding assigning admin policy to a new role created via command line when needed, Paulius for adding ID token to provide a payload in auth create and auth update filter hooks, gene for improving the performance of relational lookups, DATNA for adding a discriminated union scenario to m to a query type resolution, Matthew for adding support for title and text fields to display related values in the kanban layout, culdip for adding Morathi to the list of translations, ben for clearing login error message on successful credentials when TFA is enabled, amateo for improving flow notification messages to differentiate between async and sync flow execution, Jason for fixing typo in 3 files.\u003C/p>\u003Cp>Thank you again to all our contributors. You can see their specific pull requests inside the full release notes on GitHub. Lastly, we want to take the time to thank our GitHub Sponsors of December who financially contribute to their riches' development. Thank you to Tommy, Entle, Jamilid, Fergus, Omar, Marcus, CK, Peter, Utomic, Steven, Robson, Nonlinear, Andrea, Valentino, John, Wayne, Bjorn, Adam, Jason, Birka, Jens, Vincent, Mike, Khan, Lessey, and Wayfair. The money we are given from our GitHub Sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem.\u003C/p>\u003Cp>Thank you again for being part of that. Alright. And that is the January change log. Thank you so much to everyone for sticking around if you are still here. I hope you have enjoyed and been, educated by what we are showing.\u003C/p>\u003Cp>If you do have any questions in the meantime after this change log, we're always around in Discord to, hear what your thoughts are. And, additionally, if you have anything you'd like to see as part of the change log, always keen on feedback here, so do let us know. Thank you so much for joining us, and join us next time. The information will be around the discord events tab. So, yeah, keep an eye out for that.\u003C/p>\u003Cp>And thank you so much for joining us. Have a great rest of your day, week, and see you soon. Bye everyone.\u003C/p>","Hello everyone and welcome to the first change log of 2025. I hope you're all having an amazing start to your new year. You deserve it. As usual if you are joining us live do let us know in the chat where you're joining us from. We love to see, all the different places people are tuning in from. We have a really great show for you planned for today. We have a docs update from Carmen, a salty Santa recap from Bryant, a community showcase of a real estate app, and a new director's TV show based on authentication. So do stick around if you are able. Any questions in the meantime, let us know in the chat, and we'll, aim to help you. And I am going to start today off by sending you over to Kevin who will be giving you a product update. Hey, everyone. Kevin here to tell you about what we've shipped in Directus in the last month or so, including our latest release last week, 11.4. Recent releases have included a lot of small optimizations, improvements, and bug fixes, but here's the highlights. It's only January. There's already a lot to talk about, so let's jump straight in. We finally support new versions of Node. Js, upgrading our runtime version to Node 22. We had some dependencies that we weren't sure were compatible beyond Node 18, but we've checked and resolved all known issues so you can continue to run directives on current long term support versions of Node. We've also added the ability to toggle translation interface items to make them deletable while ensuring things like defaults, conditions, and validations continue to work as expected. This is a really nice quality of life improvement for projects with multilingual content. Our Kanban layout has also received an update, now allowing you to use relational data in titles that appear on the front of cards. Version 11.3.5 and 11.4.0 have introduced a new language, Murathi, and got it all the way to a 100% coverage. This makes it the 30th language with 70% coverage or higher with over 2 thirds of those over 90%. We've also added activity tracking for field deletion, which is really useful for both accountability and visibility into what has changed in your project. You can continue to find the activity log at the bottom of your sidebar on the right hand side of the data studio. And finally, one for extension authors and a first contribution from our new core engineer, Mike. The latest version of the CLI that ships with the director's extensions SDK has a new validate command that performs common checks to determine that your extension will run and has key qualities that we look for. In future, we're planning to tie this to the marketplace, But for now, it's a lovely local convenience tool to help you ship better extensions. You can run it now with npx create directors extension validate. And that's all from me. Lots of updates to talk about. I'm gonna kick it back over to Beth, and I'll see you next time. Bye for now. I'm going to demonstrate each of the new extensions in Directors Labs this month. As a reminder, Directors Labs is our team's experimental org on GitHub, which regularly publishes new extensions. Firstly, we have the tree view table layout which when selected from the layout options we have the option to select the parent. Here we have team members' names, who they report to, and whether or not they are warm enough at their desks. Having selected the tree view table as the layout option, we can now drag and select who reports to who out of the list of team member names. This then is reflected in, for example, Jack having the team members Astrid and Kate. The card select interface shown here with that information about records, adds image card select interfaces for single and multi selected use cases. You also have the ability to add via search and you can use inline SVGs via copy and paste, icons from material symbols library, or an image for the card select. Once selected these are reflected in the raw value. Another new extension is the switch interface which provides a nice alternative to the toggle interface which is default. Another part of this is the optional description you can add to the field. Here if we go into the interface we can add a description of 'wow, an optional description, how helpful' and once saved that will be back into the switch interface. Lastly, we have the super header interface which is a really nice way of adding more context along with actions. Here we've got information about a concert and we've got the venue and we want to change the superheader into something a bit more contextually helpful. So, if we go in to the super header title, we can alter the title to be 'location', we can add an icon, so because it's a location I think the pin makes more sense and we can choose a color using the colour picker, RVDB or HSL. I'm just going to pre select blue. You can also have a subtitle, so this is where the concert is' and we can add in helpful information to guide users so entry details will be given on the 1st of Feb. We also have the ability to add the action and that is a flow or a link. For this, I am going to say that when the button is clicked, I want us to navigate to search of concert venues. This extension gives the ability to use route level fields as variables in title subtitle or link URL and once we have changed that you can see that the super header has changed to show location and provide more context if it's needed. Hey. What's up, changelog crew? Bryant here from Directus, and I just wanted to walk you through the salty open source Santa. Alright. This is probably more of a recap seeing as Christmas is now over, but, this was a fun little app, and you may get some use out of it as well. So Salty Open Source Santa is a Nuxt and Directus application that, basically, is the open source naughty or nice list. So you log in to GitHub, write a letter to Santa, or you can also write a letter to Santa on behalf of a friend or colleague. But, basically, we write a letter to Santa. Santa then checks your GitHub profile to see your open source contributions for the year. So behind the scenes, we're calling the GitHub API, actually using the GraphQL API. We get your contributions, your commits, your pull requests, your reviews that you've given on pull requests, if you've sponsored anybody. And we put all that through a scoring algorithm and determine whether you are on the naughty or nice list. And then regardless, Santa writes you a roast style letter back. You can see Santa is particularly rough on me here. Been watching you, Brian, and let me tell you, your GitHub profile is about as impressive as a melted snowman. So some of these takes are spicy. Some of them are a little more tame, but, lots of cool little features built into this application. One of them is the spiciness meter here. So, this is just how we determine whether a take or a roast letter is particularly spicy. And, if we take a look at Santa's list, we could see the spiciness level of each one of these. So we've got a 155 folks on the naughty list, 70 on the nice list. So that's kind of, in place of a like button. You could actually roast users or organizations with this thing. And then one of the other really fun bits that we we included in this, we're using 11 Labs here to actually read the letter to you from Santa. So you can have Santa read this out loud to you, which is awesome. A member of the core team, Pedro Pizarro, has got real chops for voice over. He's a musician as well, but he sent us the sample. We cloned the voice very quickly inside 11 Labs, and it calls their API and actually generates this for you. So if you want to check out this application, if you want to remix it yourself, go to the Directus Labs repository, look for the OS Santa repo sorry, the Directus Labs organization, and look for the OS Santa repo. You can see the full source code here. Everything is MIT licensed, so feel free to grab it, do whatever you want with it. Hopefully, it's helpful in your own applications. I know I had a lot of fun building it, and we got some great feedback from a lot of folks around Christmas time. So that's it for me. Back to you guys. Alright. Hopefully, you are, excited to try that out for yourself if you haven't already. We have added all of the links to the various things mentioned in the chat, so do try it out and let us know what something says about you. Hopefully, you're on the nice list. Next up, we have Carmen with a documentation update and I believe Carmen's in the chat as well, so if you do have any questions whilst they're talking through, let us know, and we'll do the best to, have a chat with you there as well. Hey, everyone. My name is Carmen. I'm a developer educator at Directus and part of my role is documentation. Over the last few weeks, we went ahead and launched our brand new documentation platform rebuilt from the ground up. And I am so excited to walk you through the new structure and also tell you about our motivations. So let's talk about content. We've been building our documentation content over several years, starting from a minimal set of requirements. It's seen a lot of input, and we wanted to take this opportunity to consolidate everything into one voice. So, every word, every sentence, every paragraph has been looked over carefully, adapted, or rewritten. This has been a group effort, not just by myself, but other educators at Directus. As for structure, we've also carefully considered how to best lead the reader towards what they need. On the new homepage, the first thing you'll see is how to get up and running with Directus as quickly as possible with a demo. Moving lower down, you'll find a full fledged guide on getting started using Directus as well as a link to our Directus Academy video series. Let's go over our new start section. We've assembled a set of short essentials for running a Directus project from creating your data model to authentication to using real time data. Next, I wanna show you how we've created detailed reference guides for using each of Directus' features. For example, if you need to configure authentication on your Directus project, you'll find everything you need here. Our API reference has also seen a major overhaul. It's now directly generated from our new open API specification. This is fully open source. So, if you find anything, please feel free to open a pull request. We've also added a section dedicated to using Directus Cloud. How to self host your Directus project and finally restructured our configuration documentation to make your project much easier to configure. Over in resources, we've added a dedicated community section where you can find our contribution, authoring, and documenting guidelines. You'll also find our community maintained tooling. If you're working on an open source tooling for Directus, please let us know so we can add it to this section on the home page. Any release changes to Directus are logged here as well. So, keep an eye out for those as they come in. Finally, we're bringing in a set of tutorials to work with Directus. If you're looking to fetch data from Directus using a specific framework, how to build specific projects with Directus, some advanced tips and tricks, migrating from other platforms to Directus, or building your very own extensions, you'll find it all here. And there's more coming, so stay tuned. As you can see, a lot has changed and for the better, we think. You'll find this new documentation platform over at directus. Iodocs. This is an ongoing project on our end and I'd love to ask you to please have a look over the new documentation, give us feedback, and tell us what we can do to improve. You'll find a little feedback widget on every page and our team will read all of your feedback. You can also open issues in our new directus/docs repository on GitHub. Well, that's it for me. Thank you so much for listening, and I'll see you soon. Alright. Thank you so much, Carmen. That is all looking great. And as mentioned before, if you've got any questions, do let us know. Next up, and I do say this every month, but it remains to be true, is my favorite segment of the show. We have the community showcase. And this month, we have Shruti Kapoor building a real estate app. So sending over to Shruti. Hi, everyone. My name is Shruti Kapoor, and I'm going to do a quick demo for you to show you what I built with Directus. I'm a staff engineer currently working at Slack, and I love making coding tutorials for folks and help them get into front end. You can find all of my content up on YouTube at shruti kapoor 08. Now let's get into the demo. Here's a demo of an app that I built with Directus, OpenAI, Landchain, Node. Js, React, and Tailwind. It's a lot of stack, but let me simplify this demo for you. So here's a place where we can search for properties. I built this pro I built this app when I was looking for real estate in Seattle, and I was sick of entering fields in Zillow and having to manually type all of the things over and over again. So here's an app that I built. In this app, you can simply write an English language sentence like, I am looking for a 4 bedroom house with backyard, swimming pool, front yard, nice school district in the range of 2,000,000, 2,000,000, how many zeros are there in 1,000,000? 25,000,000. Let's just say I have this money. And if I hit search, that's all I have to do to look for a house and it's gonna magically look up for houses that match that preference in Seattle. So this is what I built. Also, this is also the starting point of building a recommendation engine. I built this like and dislike button. So next so let's say that I want to build a recommendation engine where I want to see more properties that match the preferences that I like. I can hit like on a property like this one, which I feel like is very pretty, or this one, which I feel like is too crowded. So I'm gonna dislike this. And now if I head over to my director's database, give it a reload, and see at the bottom that this property, 320 Northwest 75th Street, which was at 805, is marked as disliked in my database. And that's the grounds of setting up a recommendation engine. I can use the preferences that I set, yes or no, to build a recommendation engine that values the properties that I've already liked and tries to show you more properties like that, which will be the next part of this demo. By the way, I'll walk through this code very briefly to show you how I'm integrating with OpenAI. But if you're interested in a detailed walk through of this app, here is a video I've built on my channel which you can watch, Building an AI powered real estate app. But for now, let me show you how I integrate with LMM. So I've got this file called llm. Js, and this is all I'm providing my LMM. Okay? K. I'm creating an open AI, NLM, just providing it my API key. Then I'm setting a parser. I'm using the structured output parser and giving it a ZOD object that I want to create. The ZOD object that I want to create is price ending, which is gonna be a budget, which provides us a budget range of what my property should be, number of bedrooms for the house that I'm looking for, number of bathrooms. I can also provide a default value. For example, 1, if no bathroom was provided and a nice to have, which in my case would be backyard, swimming pool, front yard, front yard, nice school district, things like that. And, again, I can provide if there is nothing provided, return backyard because that's the kind of person I am. I love backyard. That's all I need to create is that object. And with this parser, I can then invoke my chain, which is how I call LLM. I'm gonna provide it a template. I'm gonna say, parse the description provided by user, and that is the text that I'm entering here at the top. And I'm gonna say pass the description provided by the user to extract information about real estate preferences. Which information? Exactly this information that I'm defining up here. And then all I need to do is invoke my chain with the description that the user has provided and the format instructions that I just generated over here. And that's how you call LLM. I'm saving all of this data in the database, which is direct us, and this will be helpful in creating a recommendation engine in the future. I can also save all of the properties that I've liked in the database. Thank you for watching my demo. Alright. Thank you so much once again to Shruti for that, and I will post the link to her full video shortly. We have a new Directors TV episode next. It came out today. It's one of 5 episodes focused on authentication. So we're going to send in the authentication avenue next. Hey there, developers, and welcome to authentication avenue. Ever wonder how your favorite apps know it's really you trying to log in? Well, today we're diving into authentication, the digital world's way of checking your ID. Let's imagine we're at our local library. When you want to borrow books, you need a library card. But getting that card isn't as simple as just walking in and saying, hey, I'm Kevin. Here's what actually happens. 1st, you fill out an application with your information. That's you claiming who you are. Then you show your ID or proof of address. That's you proving that you are really you. And only after verifying your identity does the librarian give you your very own library card. Now, every time you come back to borrow books, you show that library card. The librarian can check their system and confirm it's a valid card that actually belongs to you. And that's exactly how authentication works in the digital world. When you log in to your favorite app, you don't just type in your email and poof, you're in. Just like at the library, you need something to prove it's really you with something only you would know, your password. Now in the developer world, authentication is like that library card system. When users try to access their private data or personal settings, authentication verifies their identity using something they know, like their password, something they have, like their phone or verification codes, or something they are like their fingerprint. We call all of these authentication factors, and they're the digital equivalent of that library card and ID check. Now, once you've proven who you are, you need a way to show it with each request, like carrying your library card. In the digital world, we have a few ways of doing this. Most commonly, you will use what is known as a bearer token. It's like carrying an ID card that says, I've already proved who I am. You include this token in a special part of your request called the header. Or you might use cookies. These are like invisible name tags that your browser automatically shows to websites you've logged into before. Super convenient. And while you technically can include your credentials as query parameters in a URL, for example, example.com/, or question mark token equals 12345, we don't really recommend this because sometimes URLs can be logged. And that's like writing your password on a sticky note where anyone can see it. So remember, authentication isn't just about saying who you are but it's about proving it. Next up, we'll see how this works in practice with Directus, but first, let's return our library card. Here we have a posts collection in a Directus project, but this collection is not publicly accessible, so we will need to authenticate as a user with the requisite permissions in order to access this data. And we see here when we just try and access it, when we try and list the posts, that we get an error. You don't have permission to access the collection posts or it does not exist, which is correct because it doesn't know who we are. We have not authenticated. Now as mentioned, there's a few ways to authenticate. One of the most common is by passing in what is known as an authorization header. So the headers get sent along with our request. The value is bearer, space, and then a valid access token of a user that has permissions. And when we hit send, we will get this data back. As I mentioned, there is also another way of doing this, which is via a query parameter to your request. So you can include access token equals value, and, again, that will successfully authenticate. The reason I'm showing you this is to actually dissuade you from using this approach because this full URL, you can type it in your browser here, will return data, but this full URL, including your access token, could be logged by your browser history, by your browser extensions, by your Internet service provider, your corporate VPN provider, and so on. And so to keep it secure, we tend to not use this approach too much. I do also wanna show you how to get an access token and authenticate using the Directus SDK. So here we have just a JavaScript file. We are initializing a new Directus SDK instance, and what we're going to do is import the authentication composable. And then we are going to initialize the client with the composable. This gives us a brand new function. We can now type in directus dot login and provide our email and our password, these values here. And this client will now be authenticated. So now we can go ahead and actually query our post's data. Let's import rest and read items, which we'll need to make this request, and add the rest composable to our client. And now we can go ahead and make a query, directors dot request read items posts. And then we'll console log the items, and this line here, specifically, is what is authenticating us. Let's see if that works, and we should see, promise pending. Absolutely. We just need to put in await there, and we will now see that once the data is returned, it is displayed here. So this is how we authenticate using the SDK. Join me in the next episode of authentication avenue where we will cover a brand new topic. We want to take a moment towards the end of the changelog for thanking our community contributors who give their time to develop the Directors Project. Since last month, there have been 16 contributors. A huge thank you to Johannes for adding ability to map OIDC groups to OIDC roles, Junhong for ensuring floating view will not scroll top after route change and adding internationalization to rich text editor toolbar, Dominic for fixing the alignment of the 'select all' checkbox in the notifications drawer, and adding system argument for the clear cache function in the SDK, Robson for enhancing vertical alignment of SSO icons on login page, Osman for fixing an issue with unintentional sorting after editing items in relational interfaces, Gavelium for improving the default user created display template by using the avatar field, Gloria for increasing raw editor max height, Nick for adding assigning admin policy to a new role created via command line when needed, Paulius for adding ID token to provide a payload in auth create and auth update filter hooks, gene for improving the performance of relational lookups, DATNA for adding a discriminated union scenario to m to a query type resolution, Matthew for adding support for title and text fields to display related values in the kanban layout, culdip for adding Morathi to the list of translations, ben for clearing login error message on successful credentials when TFA is enabled, amateo for improving flow notification messages to differentiate between async and sync flow execution, Jason for fixing typo in 3 files. Thank you again to all our contributors. You can see their specific pull requests inside the full release notes on GitHub. Lastly, we want to take the time to thank our GitHub Sponsors of December who financially contribute to their riches' development. Thank you to Tommy, Entle, Jamilid, Fergus, Omar, Marcus, CK, Peter, Utomic, Steven, Robson, Nonlinear, Andrea, Valentino, John, Wayne, Bjorn, Adam, Jason, Birka, Jens, Vincent, Mike, Khan, Lessey, and Wayfair. The money we are given from our GitHub Sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. And that is the January change log. Thank you so much to everyone for sticking around if you are still here. I hope you have enjoyed and been, educated by what we are showing. If you do have any questions in the meantime after this change log, we're always around in Discord to, hear what your thoughts are. And, additionally, if you have anything you'd like to see as part of the change log, always keen on feedback here, so do let us know. Thank you so much for joining us, and join us next time. The information will be around the discord events tab. So, yeah, keep an eye out for that. And thank you so much for joining us. Have a great rest of your day, week, and see you soon. Bye everyone.","ee99b59e-52e3-4401-a57f-10ab14f69344",[271,272,273,274],"42d869b7-2872-4c42-9c21-964b9c6aa34d","6cd7f001-85b5-4ae5-ace8-6aafa9d9cd37","07b7288f-5b49-4bf2-aa61-daf78c5ccd94","3f30c283-367a-4535-ab32-083047861140",[],{"id":139,"number":140,"show":122,"year":141,"episodes":277},[143,144,145,146,147,148,149,150],{"id":144,"slug":279,"vimeo_id":280,"description":281,"tile":282,"length":283,"resources":8,"people":8,"episode_number":284,"published":285,"title":286,"video_transcript_html":287,"video_transcript_text":288,"content":8,"seo":289,"status":130,"episode_people":290,"recommendations":294,"season":295},"February-2025","1053401939","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes a documentation update, Labs extension showcase, a template preview from Lindsey Zylstra and an episode of a new show on Directus TV called Translation Station.","b6280603-6b9a-4a4b-a17d-5f9b03d9c1ec",26,7,"2025-02-12","February 2025","\u003Cp>Speaker 0: Alright. Hello, everyone. I hope you're having a great day. I'm Beth, and it is my pleasure to welcome you to the February change log. As usual, if you are live, do let us know in the chat where you are joining us from.\u003C/p>\u003Cp>We have a great set of updates for you today. We have some product updates. We've got some new extensions, some tutorials coming for you very soon. We have a new episode of a brand new director's TV show that has launched today, and we have Lindsay with a starter's preview. So do stick around if you are able to.\u003C/p>\u003Cp>And I'm gonna kick us off by sending this over to Kevin for some product updates.\u003C/p>\u003Cp>Speaker 1: Hello. Kevin here with an update on what's new in Directus version eleven point four point one. This is a nice small release with some quality of life improvements. Firstly, we have standardized how delete buttons work across the Data Studio with a new component. They have a nice little confirmation dialogue so you don't mistakenly delete things in future expecting it to be there when it wasn't always.\u003C/p>\u003Cp>The translation store is now available to app extension authors, which makes it easier to create multi language app extensions for the Data Studio. Directus now supports rendering many to any items in related value displays, for example, in layouts. And the send email operation now supports cc, bcc, and reply to fields, which like everything in Directus Automate can take in dynamic values. There's also been a whole bunch of little fixes which are rooted in consistency and standardization across Directus. You can check the full release notes in GitHub.\u003C/p>\u003Cp>You can download Directus eleven point four point one from Docker Hub and use these new additions in Directus Cloud right now. Thank you so much for joining me, and we'll see you next time.\u003C/p>\u003Cp>Speaker 2: Hi. I'm Mike, and I'm from the developer experience team. I'm going to demonstrate each of the new extensions in Directus Labs this month. As a reminder, Directus Labs is our team's experimental org on GitHub, which regularly publishes new extensions. The first extension we'll go through is going to be the YouTube embed, which is listed here, and I've put it as video cast.\u003C/p>\u003Cp>If we open up the item, we can add URL, and then we'll have the actual interface itself. This is configured using the Google Console API and the channel specifically you want to look at. So I'm just going to randomly select something so I know it makes sense. Copy that. Add that there just for a little bit of context for myself.\u003C/p>\u003Cp>Look into YouTube and then look up sell. Copy the item. Remember to put this into the code of the content of from the WYSIWYG if necessary. And\u003C/p>\u003Cp>Speaker 3: we are\u003C/p>\u003Cp>Speaker 2: good. And that is the YouTube interface. The next extension we'll show is the AI researcher bundle. With this one, we can configure it with anthropic or open AI models. All you require is your API key to add to it.\u003C/p>\u003Cp>So in this case, I have my PhD thesis, and I want to ask something about quarks. What is a quark? It'll go away and ask the model and return the answer. And it does it in great depth. How many types are there?\u003C/p>\u003Cp>And since we've been asking separate questions and we want to keep the context of the conversation, the entire conversation is available in this pop up whilst still maintaining the main value. So we can close that and move on. And here we have our final extension of the day. This is the inline repeater. As you can see, it has elements that can be expanded and include multiple items as part of them.\u003C/p>\u003Cp>So here we have the service and the URL for a podcast. I'm gonna add a new one here. And we're gonna go to Spotify and just grab the URL. Add that in. And we'll we'll have multiple inline elements containing the different objects.\u003C/p>\u003Cp>We can add as many as we like as part of this repeater. Thanks.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you so much to Kevin and Mike for those updates. If you're planning on using anything that they've mentioned or if you've got any questions about it, do let us know here in the chat or on discord and we'll do our best to get you your answers. And next up we are very excited to have Lindsay talking about starters preview. So here is Lindsay.\u003C/p>\u003Cp>Speaker 3: Hi. I'm Lindsay Zylstra. Today, I'm excited to introduce you to our new Next. Js simple CMS starter. This starter is designed to work with our simple CMS back end template.\u003C/p>\u003Cp>It gives you a powerful starting point to build off of or modify to meet your unique needs so you can style and customize quickly without getting bogged down with the setup. But what exactly is this starter? Essentially, it's a ready to use framework specific front end that connects seamlessly with our simple CMS back end to help you build full CMS web applications. With this starter, you benefit from a robust Directus integration that simplifies content management, along with Next. Js App Router that effortlessly handles dynamic routing and layouts.\u003C/p>\u003Cp>We've we've also incorporated Tailwind CSS and ShadCn components to offer rapid, utility first styling. Plus, it comes with built in examples that show you how to implement live previews, add customized blocks, set up dynamic form fields, all of this giving you a complete toolkit to kick start your projects. Let me switch over to my screen for a quick demo. First, I'm gonna show you our Directus integration in Versus Code. Here you can see we're using the Directus SDK along with a fetchers file here that gives a great example of how to retrieve data from Directus seamlessly.\u003C/p>\u003Cp>We've also included a command line tool to generate Directus types automatically, saving you the hassle of creating them manually. Now if we look over here at our direct Us pages content, you can see our starter pages build dynamically from direct Us data. This dynamic approach allows you to add blocks and construct your pages, and we've integrated site map generation and SEO in order to give you a head start on making your site more discoverable. We've left most of the styling up to you with only minimal opinionated design choices. However, we've included useful features like dark mode and the ability to set an accent color So you can easily tailor the look to match your brand.\u003C/p>\u003Cp>Moving on to dynamic forms. Our dynamic forms are designed to offer flexibility. You can quickly create forms with fields defined in Directus. For example, here's a contact us form. You can set customized success messages as well as change your submit labels and add in any type of field you'd like to see.\u003C/p>\u003Cp>We manage validations through Zod, schema validation. This setup makes it straightforward to add any additional validations you might need. Here's the contact us form on the page. Finally, we'll take a look at our global search. It provides a basic search right out of the box.\u003C/p>\u003Cp>You have the capability to expand it for deeper and more comprehensive searches as your project grows. Each of these features work together to create a flexible, developer friendly starter that empowers you to build full CMS powered web applications without unnecessary overhead. Our primary goal was to create a developer friendly experience that tackles common challenges head on. We focused on ensuring smooth live preview, flexible content management, and intuitive setup, whether you're running Directus in the cloud or locally. So how do you get access to this?\u003C/p>\u003Cp>You can find this code in our Directus Labs repo under starters. Dive right in by following our detailed setup instructions available in the ReadMe files. This will get you up and running with all the features we've discussed. As a sneak peek, we're also working on a command line tool that'll be out in beta soon. This will simplify the installation and configuration even further so you can focus on building and less on setup.\u003C/p>\u003Cp>That's our quick overview of our Next. Js simple CMS starter with Directus integration. I hope you enjoyed this walk through. In the coming months, we plan to release more of these starters for other popular frameworks as well as more that will pair with our other back end templates. So be sure to check back in.\u003C/p>\u003Cp>If you're interested in the command line tool or any of our future starters that will be released, make sure to subscribe to our newsletter. Thank you for watching. I can't wait to see what you build with this tool. Have a great day.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you so much to Lindsay, and we're hoping that you're as excited as we are to be able to share that. Before I move us on to the episode of Translation Station, I wanna highlight that we've got some, exciting tutorials coming your way to the new docs very soon. We have implementing direct us live preview and using direct us off, in Next, Nuxt, Astro, and SvelteKit, and they'll be available very soon. So do check back, if that sounds good to you.\u003C/p>\u003Cp>Next, we have episode one of translation station, which is a four part new directors TV series. It's exploring the opportunities of localization in directors. And as a series, it covers topics from translating the director's code base, translation strings, translating your content, and accessing your translated content via the director's APIs. Have I said translation one too many times? I think you get the idea that it's all about translations, so here is episode one.\u003C/p>\u003Cp>Speaker 4: Carmen, developer, educator, and translation station. Translation station. Alright. Back to English. So here we've got a direct us project that I'm running for my blog.\u003C/p>\u003Cp>And, yeah, just one blog post for now. We'll be filling it up with time. I wanted to show you in the data studio the collections I've got. I've got some authors, I've got some languages, and I've got some posts. So, as you can see, my computer's default language is English.\u003C/p>\u003Cp>Now, my Directus project is also running by default in English. But what if I wanna make it available in another language? What I can do is go over to the settings module and then the settings page itself where amongst other settings, I'm gonna find the default language. I'm gonna open this up and show you just how many languages we have available here. And not just languages, but languages specific to a region.\u003C/p>\u003Cp>So, I'm gonna scroll down being Chilean myself, I'm gonna set my language to Latin American Spanish. Gina's there too, but I wanna encompass all of this continent. Click on that and I'm going to save my changes. You can see now that a bunch of things have changed already. I'm in the setting in the modules instead of settings and so on and so forth.\u003C/p>\u003Cp>What's really key to know here is the Directus project language has now changed. But what happens to the rest of our things? For example, in our data model, or modelo de depos, we're gonna see that the names of our collections haven't changed. Or, if we go to content or contenido as it is now, we're gonna see that my blog post stays the same, even the fields on the blog post themselves. But that's to be expected because our project is now in Spanish, but the content itself and the data model are still in English because that's how it was when I created it.\u003C/p>\u003Cp>But what I want to focus on here is the language of the Directus project itself. Let's go back to our settings module real quick. You might be wondering where do the translations for these come from and how can I change or contribute to them? Now given that Directus is open source under the BSL license, we actually get these translations as open source contributions. That's right.\u003C/p>\u003Cp>You can contribute your own translations to Directus. Next, I'm gonna show you how to do that. Over in the Directus documentation, under Resources, Community, and contribution translations, we're gonna find the instructions for how to contribute localizations to the Directus Data Studio, and this is done via platform called Crowdin. So over in Crowdin, we can see there's a bunch of translations that exist, which I love to see. We've got Catalan, Dutch, Finnish, Estonian, and a whole bunch of other languages.\u003C/p>\u003Cp>So, how can I contribute to a language, say, if I find a typo? First thing I need to do is log in to Crowded, which is via a free account. Now that I'm logged in, I can go ahead and look for my language and start contributing to it. For example, let's look for Spanish and specifically focus on that Spanish Latin America. Now on this page, I'm gonna click on translate all.\u003C/p>\u003Cp>This will give me a list of all of the strings or pieces of text that can be translated in Directus. Now here, under editing preset, I can see the string editor predefinido. But because this is in the current test we're currently editing, it should actually be editando predefinido. So what I'm gonna do is make that suggestion and save it. But because there's already an approved translation, what I'm gonna do is notify a proofreader.\u003C/p>\u003Cp>Cool. So now my suggestion is made to improve this Latin American Spanish translation of Directus. But what happens next? So our team over at Directus is going to get a pull request from Crowdin with the change that I've made. Now you might be thinking, well, why don't I just make the pull request if it's open source?\u003C/p>\u003Cp>Bear in mind that crowding's automatic synchronization is going to overwrite any changes that don't correspond with crowding itself. So it's best to make those translations directly through crowding. Now, the last question is, when am I gonna get that new string? It'll be merged into Directus itself and will be available in the next release. So, now we just gotta sit tight.\u003C/p>\u003Cp>Alright. Well, there you have it. How to configure your Directus project in another language, which strings are translated directly, and how to contribute your own translations to the greater Directus ecosystem. I hope this was helpful, but there's more stops on this translation station journey we're going on. We'll also be learning about translation strings, translating content in the data studio, and accessing translated content in your own application.\u003C/p>\u003Cp>So all aboard for the next station, and off we go. See you next time.\u003C/p>\u003Cp>Speaker 5: We want to take a moment towards the end of the change log for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been three contributors. A huge thank you to Nicholas for fixing conditional interface options incorrectly replacing choices, High Vibes only for adding support for CC, BCC, and reply to fields to the email operation, iodele for fixing a grammar error in the live preview documentation. Thank you again, and you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of January who financially contribute to Directus' development.\u003C/p>\u003Cp>A huge thank you to Wei Fan, Entel, Jamiluddin, Fergus, Omar, Marcus, c k, Peter, Utomic, Steven, Robson, nonlinear, Andreas, Valentino, John, Wayne, Burb, Adam, Jason, Birka, Jens, Vincent, Mike, Khan, and Lassie. The money we are given from our GitHub Sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. For this month's reading list, we're going off script and sharing an audio special of our favorite tech and tech adjacent podcasts. Firstly, one that you've likely heard of, Syntax, a podcast about web development covering topics including full stack web development, the latest frameworks, databases, and lots more. There's over 800 episodes, so lots to check out.\u003C/p>\u003Cp>Next, we have Waveform, a weekly podcast aimed at gadget lovers covering trends and product reviews. Next is Darknet Diaries, which explores topics from the dark web like cybercrime, hacking, and other less than legal activities, as well as the people fighting back against them. Deep Questions with Cal Newport focuses on productivity and the struggle to work and live deeply in a world with lots of digital distractions. Decoder is a new show from The Verge that members of our team have been enjoying for its interviews with technology leaders on their take on technology and the future of it all. The DevTools podcast does what it says on the tin.\u003C/p>\u003Cp>It's a podcast about developer tools and the people who make them, with lots of interesting guests from companies you're probably using. Hiking humans looks behind the social engineering scams, phishing schemes, and criminal exploits that are making headlines and taking a heavy toll on organizations around the world. What the Shell, aside from having an exceptional name, provides an accessible look into major hacks and vulnerabilities through looking at incidents and news. And lastly, but in no means least, open observability talks discuss harnessing the power of open source to advance observability initiatives with guests that range from open source project creators, end users, and thought leaders. We hope you enjoy checking out some of the podcasts.\u003C/p>\u003Cp>If you've got your own recommendations, do share them with us. We'd love to hear what you're listening to.\u003C/p>\u003Cp>Speaker 0: Alright and that is it for February's the changelog. If you have any questions about anything you've seen and whether you're joining us live or, watching on demand do get over to discord and we'll be able to help help you out over there. Do check out Director TV. We are always adding new shows. You should be able to find translation station.\u003C/p>\u003Cp>It will be right at the top, so you shouldn't be able to miss it. As always, if you've got any feedback about things you'd like to see within the changelog, very searchable feedback. We'd love to hear your thoughts. Thank you so much if you have made it this far for sticking with us and spending your time with us. We really appreciate it.\u003C/p>\u003Cp>And please head over to Discord for the next info on the change log for March. Have a great day, everyone, and I'll chat with you soon. Bye.\u003C/p>","Alright. Hello, everyone. I hope you're having a great day. I'm Beth, and it is my pleasure to welcome you to the February change log. As usual, if you are live, do let us know in the chat where you are joining us from. We have a great set of updates for you today. We have some product updates. We've got some new extensions, some tutorials coming for you very soon. We have a new episode of a brand new director's TV show that has launched today, and we have Lindsay with a starter's preview. So do stick around if you are able to. And I'm gonna kick us off by sending this over to Kevin for some product updates. Hello. Kevin here with an update on what's new in Directus version eleven point four point one. This is a nice small release with some quality of life improvements. Firstly, we have standardized how delete buttons work across the Data Studio with a new component. They have a nice little confirmation dialogue so you don't mistakenly delete things in future expecting it to be there when it wasn't always. The translation store is now available to app extension authors, which makes it easier to create multi language app extensions for the Data Studio. Directus now supports rendering many to any items in related value displays, for example, in layouts. And the send email operation now supports cc, bcc, and reply to fields, which like everything in Directus Automate can take in dynamic values. There's also been a whole bunch of little fixes which are rooted in consistency and standardization across Directus. You can check the full release notes in GitHub. You can download Directus eleven point four point one from Docker Hub and use these new additions in Directus Cloud right now. Thank you so much for joining me, and we'll see you next time. Hi. I'm Mike, and I'm from the developer experience team. I'm going to demonstrate each of the new extensions in Directus Labs this month. As a reminder, Directus Labs is our team's experimental org on GitHub, which regularly publishes new extensions. The first extension we'll go through is going to be the YouTube embed, which is listed here, and I've put it as video cast. If we open up the item, we can add URL, and then we'll have the actual interface itself. This is configured using the Google Console API and the channel specifically you want to look at. So I'm just going to randomly select something so I know it makes sense. Copy that. Add that there just for a little bit of context for myself. Look into YouTube and then look up sell. Copy the item. Remember to put this into the code of the content of from the WYSIWYG if necessary. And we are good. And that is the YouTube interface. The next extension we'll show is the AI researcher bundle. With this one, we can configure it with anthropic or open AI models. All you require is your API key to add to it. So in this case, I have my PhD thesis, and I want to ask something about quarks. What is a quark? It'll go away and ask the model and return the answer. And it does it in great depth. How many types are there? And since we've been asking separate questions and we want to keep the context of the conversation, the entire conversation is available in this pop up whilst still maintaining the main value. So we can close that and move on. And here we have our final extension of the day. This is the inline repeater. As you can see, it has elements that can be expanded and include multiple items as part of them. So here we have the service and the URL for a podcast. I'm gonna add a new one here. And we're gonna go to Spotify and just grab the URL. Add that in. And we'll we'll have multiple inline elements containing the different objects. We can add as many as we like as part of this repeater. Thanks. Alright. Thank you so much to Kevin and Mike for those updates. If you're planning on using anything that they've mentioned or if you've got any questions about it, do let us know here in the chat or on discord and we'll do our best to get you your answers. And next up we are very excited to have Lindsay talking about starters preview. So here is Lindsay. Hi. I'm Lindsay Zylstra. Today, I'm excited to introduce you to our new Next. Js simple CMS starter. This starter is designed to work with our simple CMS back end template. It gives you a powerful starting point to build off of or modify to meet your unique needs so you can style and customize quickly without getting bogged down with the setup. But what exactly is this starter? Essentially, it's a ready to use framework specific front end that connects seamlessly with our simple CMS back end to help you build full CMS web applications. With this starter, you benefit from a robust Directus integration that simplifies content management, along with Next. Js App Router that effortlessly handles dynamic routing and layouts. We've we've also incorporated Tailwind CSS and ShadCn components to offer rapid, utility first styling. Plus, it comes with built in examples that show you how to implement live previews, add customized blocks, set up dynamic form fields, all of this giving you a complete toolkit to kick start your projects. Let me switch over to my screen for a quick demo. First, I'm gonna show you our Directus integration in Versus Code. Here you can see we're using the Directus SDK along with a fetchers file here that gives a great example of how to retrieve data from Directus seamlessly. We've also included a command line tool to generate Directus types automatically, saving you the hassle of creating them manually. Now if we look over here at our direct Us pages content, you can see our starter pages build dynamically from direct Us data. This dynamic approach allows you to add blocks and construct your pages, and we've integrated site map generation and SEO in order to give you a head start on making your site more discoverable. We've left most of the styling up to you with only minimal opinionated design choices. However, we've included useful features like dark mode and the ability to set an accent color So you can easily tailor the look to match your brand. Moving on to dynamic forms. Our dynamic forms are designed to offer flexibility. You can quickly create forms with fields defined in Directus. For example, here's a contact us form. You can set customized success messages as well as change your submit labels and add in any type of field you'd like to see. We manage validations through Zod, schema validation. This setup makes it straightforward to add any additional validations you might need. Here's the contact us form on the page. Finally, we'll take a look at our global search. It provides a basic search right out of the box. You have the capability to expand it for deeper and more comprehensive searches as your project grows. Each of these features work together to create a flexible, developer friendly starter that empowers you to build full CMS powered web applications without unnecessary overhead. Our primary goal was to create a developer friendly experience that tackles common challenges head on. We focused on ensuring smooth live preview, flexible content management, and intuitive setup, whether you're running Directus in the cloud or locally. So how do you get access to this? You can find this code in our Directus Labs repo under starters. Dive right in by following our detailed setup instructions available in the ReadMe files. This will get you up and running with all the features we've discussed. As a sneak peek, we're also working on a command line tool that'll be out in beta soon. This will simplify the installation and configuration even further so you can focus on building and less on setup. That's our quick overview of our Next. Js simple CMS starter with Directus integration. I hope you enjoyed this walk through. In the coming months, we plan to release more of these starters for other popular frameworks as well as more that will pair with our other back end templates. So be sure to check back in. If you're interested in the command line tool or any of our future starters that will be released, make sure to subscribe to our newsletter. Thank you for watching. I can't wait to see what you build with this tool. Have a great day. Alright. Thank you so much to Lindsay, and we're hoping that you're as excited as we are to be able to share that. Before I move us on to the episode of Translation Station, I wanna highlight that we've got some, exciting tutorials coming your way to the new docs very soon. We have implementing direct us live preview and using direct us off, in Next, Nuxt, Astro, and SvelteKit, and they'll be available very soon. So do check back, if that sounds good to you. Next, we have episode one of translation station, which is a four part new directors TV series. It's exploring the opportunities of localization in directors. And as a series, it covers topics from translating the director's code base, translation strings, translating your content, and accessing your translated content via the director's APIs. Have I said translation one too many times? I think you get the idea that it's all about translations, so here is episode one. Carmen, developer, educator, and translation station. Translation station. Alright. Back to English. So here we've got a direct us project that I'm running for my blog. And, yeah, just one blog post for now. We'll be filling it up with time. I wanted to show you in the data studio the collections I've got. I've got some authors, I've got some languages, and I've got some posts. So, as you can see, my computer's default language is English. Now, my Directus project is also running by default in English. But what if I wanna make it available in another language? What I can do is go over to the settings module and then the settings page itself where amongst other settings, I'm gonna find the default language. I'm gonna open this up and show you just how many languages we have available here. And not just languages, but languages specific to a region. So, I'm gonna scroll down being Chilean myself, I'm gonna set my language to Latin American Spanish. Gina's there too, but I wanna encompass all of this continent. Click on that and I'm going to save my changes. You can see now that a bunch of things have changed already. I'm in the setting in the modules instead of settings and so on and so forth. What's really key to know here is the Directus project language has now changed. But what happens to the rest of our things? For example, in our data model, or modelo de depos, we're gonna see that the names of our collections haven't changed. Or, if we go to content or contenido as it is now, we're gonna see that my blog post stays the same, even the fields on the blog post themselves. But that's to be expected because our project is now in Spanish, but the content itself and the data model are still in English because that's how it was when I created it. But what I want to focus on here is the language of the Directus project itself. Let's go back to our settings module real quick. You might be wondering where do the translations for these come from and how can I change or contribute to them? Now given that Directus is open source under the BSL license, we actually get these translations as open source contributions. That's right. You can contribute your own translations to Directus. Next, I'm gonna show you how to do that. Over in the Directus documentation, under Resources, Community, and contribution translations, we're gonna find the instructions for how to contribute localizations to the Directus Data Studio, and this is done via platform called Crowdin. So over in Crowdin, we can see there's a bunch of translations that exist, which I love to see. We've got Catalan, Dutch, Finnish, Estonian, and a whole bunch of other languages. So, how can I contribute to a language, say, if I find a typo? First thing I need to do is log in to Crowded, which is via a free account. Now that I'm logged in, I can go ahead and look for my language and start contributing to it. For example, let's look for Spanish and specifically focus on that Spanish Latin America. Now on this page, I'm gonna click on translate all. This will give me a list of all of the strings or pieces of text that can be translated in Directus. Now here, under editing preset, I can see the string editor predefinido. But because this is in the current test we're currently editing, it should actually be editando predefinido. So what I'm gonna do is make that suggestion and save it. But because there's already an approved translation, what I'm gonna do is notify a proofreader. Cool. So now my suggestion is made to improve this Latin American Spanish translation of Directus. But what happens next? So our team over at Directus is going to get a pull request from Crowdin with the change that I've made. Now you might be thinking, well, why don't I just make the pull request if it's open source? Bear in mind that crowding's automatic synchronization is going to overwrite any changes that don't correspond with crowding itself. So it's best to make those translations directly through crowding. Now, the last question is, when am I gonna get that new string? It'll be merged into Directus itself and will be available in the next release. So, now we just gotta sit tight. Alright. Well, there you have it. How to configure your Directus project in another language, which strings are translated directly, and how to contribute your own translations to the greater Directus ecosystem. I hope this was helpful, but there's more stops on this translation station journey we're going on. We'll also be learning about translation strings, translating content in the data studio, and accessing translated content in your own application. So all aboard for the next station, and off we go. See you next time. We want to take a moment towards the end of the change log for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been three contributors. A huge thank you to Nicholas for fixing conditional interface options incorrectly replacing choices, High Vibes only for adding support for CC, BCC, and reply to fields to the email operation, iodele for fixing a grammar error in the live preview documentation. Thank you again, and you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of January who financially contribute to Directus' development. A huge thank you to Wei Fan, Entel, Jamiluddin, Fergus, Omar, Marcus, c k, Peter, Utomic, Steven, Robson, nonlinear, Andreas, Valentino, John, Wayne, Burb, Adam, Jason, Birka, Jens, Vincent, Mike, Khan, and Lassie. The money we are given from our GitHub Sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. For this month's reading list, we're going off script and sharing an audio special of our favorite tech and tech adjacent podcasts. Firstly, one that you've likely heard of, Syntax, a podcast about web development covering topics including full stack web development, the latest frameworks, databases, and lots more. There's over 800 episodes, so lots to check out. Next, we have Waveform, a weekly podcast aimed at gadget lovers covering trends and product reviews. Next is Darknet Diaries, which explores topics from the dark web like cybercrime, hacking, and other less than legal activities, as well as the people fighting back against them. Deep Questions with Cal Newport focuses on productivity and the struggle to work and live deeply in a world with lots of digital distractions. Decoder is a new show from The Verge that members of our team have been enjoying for its interviews with technology leaders on their take on technology and the future of it all. The DevTools podcast does what it says on the tin. It's a podcast about developer tools and the people who make them, with lots of interesting guests from companies you're probably using. Hiking humans looks behind the social engineering scams, phishing schemes, and criminal exploits that are making headlines and taking a heavy toll on organizations around the world. What the Shell, aside from having an exceptional name, provides an accessible look into major hacks and vulnerabilities through looking at incidents and news. And lastly, but in no means least, open observability talks discuss harnessing the power of open source to advance observability initiatives with guests that range from open source project creators, end users, and thought leaders. We hope you enjoy checking out some of the podcasts. If you've got your own recommendations, do share them with us. We'd love to hear what you're listening to. Alright and that is it for February's the changelog. If you have any questions about anything you've seen and whether you're joining us live or, watching on demand do get over to discord and we'll be able to help help you out over there. Do check out Director TV. We are always adding new shows. You should be able to find translation station. It will be right at the top, so you shouldn't be able to miss it. As always, if you've got any feedback about things you'd like to see within the changelog, very searchable feedback. We'd love to hear your thoughts. Thank you so much if you have made it this far for sticking with us and spending your time with us. We really appreciate it. And please head over to Discord for the next info on the change log for March. Have a great day, everyone, and I'll chat with you soon. Bye.","dec97d4f-8fd6-431d-b8bb-96f80bb292c1",[291,292,293],"aef5c5fc-6394-4c0f-8633-89193d5d1e63","32d28229-73f2-4ffe-939c-c28f99b68ca6","89bb5a15-8430-4acc-85c6-6ccb20c33349",[],{"id":139,"number":140,"show":122,"year":141,"episodes":296},[143,144,145,146,147,148,149,150],{"id":145,"slug":298,"vimeo_id":299,"description":300,"tile":301,"length":302,"resources":8,"people":8,"episode_number":303,"published":304,"title":305,"video_transcript_html":306,"video_transcript_text":307,"content":8,"seo":308,"status":130,"episode_people":309,"recommendations":314,"season":315},"march-2025","1063229947","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month includes new extensions such as an SEO plugin and field comments module, a new episode of Unchartered Territory and What's in your Dock from Bryant.","f6439d36-d8f8-45f9-91f1-8dd032f99b32",34,8,"2025-03-12","March 2025","\u003Cp>Speaker 0: Alright. Hello, everyone. Hopefully, you are having a great day. If you're new here, I'm Beth, and I am here to take you through what is new with Directus in March. We have a really great show for you today.\u003C/p>\n\u003Cp>We have a lot of Bryant. We're very lucky. He will be taking us through what his working setup is in a special edition of what's in your dock. We also have a brand new episode one of uncharted territory, a brand new director's TV show. But first, I have an invite for you.\u003C/p>\n\u003Cp>So if you are free on the March 20, we are hosting a workshop with Ingest called building advanced content workflows. And in it, you can learn how to build an automated translation system using direct us in ingest that you can implement immediately. It is on the March 20. And if you are in our Discord, you can see it with the little events tab on the there. First of all though I'm gonna take you through to Carmen who has got the product updates for you, for this month.\u003C/p>\n\u003Cp>Speaker 1: Hey, everyone. Carmen here to tell you about what we've shipped in Directus in the last month or so with eleven point five point zero and eleven point five point one. We've added numerous small improvements and bug fixes. And in this section, I'm gonna highlight two of these to draw your attention. Firstly and importantly, we have a breaking change to bring to your attention.\u003C/p>\n\u003Cp>There is a changed error message when a flow condition operation fails, And we've added partial Prometheus supports for your monitoring needs. Currently, we support the pull method via the metrics endpoint. Metrics generated can be controlled by a CSV of services to observe using the metric services environment variable. So that's what we've released in the last month. Be sure to keep up with releases on our documentation at directus.i0/docs.\u003C/p>\n\u003Cp>And if you have any questions or feedback, be sure to join us on Discord. This month, we've added two different tutorials to our documentation in four frameworks each, Next. Js, Astro, SvelteKit, and Nuxt. So, yeah, we've got eight new articles. These are on implementing multilingual content using Directus and the framework and rendering dynamic blocks using framework.\u003C/p>\n\u003Cp>You can check them out at directus.i0/docs forward /tutorials forward slash getting dash started.\u003C/p>\n\u003Cp>Speaker 2: Hello. I'm Mike, and I'm from the marketing team. I'm gonna be here to talk to you about all the latest extensions that have been released in the Director's Labs org on GitHub. Just as a reminder, this org is where we publish regularly new experimental extensions with quality of life or feature improvements that could be used. First, we're gonna be talking about the field comments module.\u003C/p>\n\u003Cp>First, what we need to do is connect it to a collection. In this case, I'm gonna attach it to our employees collection. We can enable it on all fields by default, or we can select specific fields we wish to be able to comment against. When we add an official record, so for this, I'll be adding myself. I am the developer experience engineer.\u003C/p>\n\u003Cp>I do things with extensions. You'll notice how there's no additional information or anything here. Once the record is created, we can go back in, and you'll notice how there are now additional comments sections that we can add. So in this case, at admin user, is this person actually the dev ex engineer? Once we submit this, we'll be had a comment to that field, and it'll tag accordingly how many comments are available.\u003C/p>\n\u003Cp>This also uses the existing commenting, feature of directors. So if you tag somebody, etcetera, they will receive a notification about it. And as an aside, any field level comment is completely isolated to its field and doesn't appear in the item level comments. The next extension we're talking about is the SEO plugin. We can configure this quickly with templates for both the title, the meta description, and we can enable additional functionality such as sitemap controls for how often things are going to be updating our sitemap, search engine controls for things such as no follow and no index, as well as adding the social media image for graphs.\u003C/p>\n\u003Cp>I'm going to just quickly skip that one so I don't have to attach an image. Add this to\u003C/p>\n\u003Cp>Speaker 1: our data model. Once we are\u003C/p>\n\u003Cp>Speaker 2: back in our data model, you'll be able to see that we have our content as well as our new fields for SEO. So, okay. Alsmore is the DevX engineer. Mike those things with extensions for directors. And you'll notice how we're now getting a lovely preview with some help controllers, so we don't want this to be followed, but we do want it to be indexed.\u003C/p>\n\u003Cp>And now we can save this. This extension that we'll be looking at is the WYSIWYG add edit file link. So if we create an item, this is the selected field. There is a new add edit file link button. So if we have some content and we want to insert a file, for example, we can grab off my desktop a text file, add it, the transcript of the meeting, and we can have it open in a new field.\u003C/p>\n\u003Cp>This image, preview doesn't work as it's not an image, but we add this, and we'll have the transcript to the new meeting as a file. We can also then go in, revise it, and change anything. The complete just as if we were editing the normal link, we can also and just to double check, we can also upload an image. Director's logo, which will have the preview and allow us to insert it with the download option. And they look like so, with the complete URL through to the assets library locally.\u003C/p>\n\u003Cp>The final module for this month is going to be the migrate module. Here you can see I have the migrate modules interface, and the Directus instance I'm going to send it to. This is, my local instance, and this is a remote cloud instance. As you can see here, there is no content, no collections available, but we have a collection available here. So I'm just gonna quickly grab a static token, as the module requires a authorization token to interact with the client.\u003C/p>\n\u003Cp>Don't worry. I'll recycle this afterwards so that nobody can use it. Save that. Going to grab our domain for the client. Now we can really check to see if it is compatible.\u003C/p>\n\u003Cp>And you'll see here that there there is a difference. My local is running 11.4, and the remote is 11.51. We can force this through. I'm going to now. Or we can use this as an opportunity to run any upgrades, etcetera, to make sure everything is aligned, especially if there is a major difference like version 10 or any of the larger schema changes internally.\u003C/p>\n\u003Cp>So we're gonna force this, and we don't want to copy over the users because I already have an admin user over in my remote. So we are now going to start the dry run, and it's going to create a snapshot and create collection options. This may take a moment. We're also able to preview every one of the files created as part of the migration, all the individual components that make it up. Now to actually do the migration, we apply our key and our domain.\u003C/p>\n\u003Cp>We are once again gonna have to force it through, and we remove the driver and tag. This way, it's not just building it and running locally. It is pushing up to the remote instance. So just to validate again, we don't have a collection here. I'm gonna start the migration process.\u003C/p>\n\u003Cp>And now we can see that the migration is complete, but it has skipped the users as we already have an admin user. Now if I reload the content, we will have our employee collection with me, the developer experience engineer, with all the relevant information internally. The only thing that's missing is this instance will now need to be configured with the correct extensions for it to operate as expected.\u003C/p>\n\u003Cp>Speaker 0: Alright. Hopefully, you found those interesting. Mike, I don't know if you're in the chat, but what is your keyboard? It's clicky, it's a chef's kiss. Very nice.\u003C/p>\n\u003Cp>It's very satisfying. If you are planning on using anything that was just mentioned or you have any questions, let us know. A few of us are hanging around in the chat so we can see them and answer your questions. Or if you are catching this on demand, let us know in Discord, and we'll see what we can do. It is time for the first of Brian's sections.\u003C/p>\n\u003Cp>So he is gonna be talking us through what is in your doc. And if you haven't caught that on the director's TV already, we have a bunch of cool people with very interesting jobs tell us what they are using in their day to day setup. And so here is Bryant's. Hey.\u003C/p>\n\u003Cp>Speaker 3: Hey. Bryant here from Directus, and I I guess today I'm actually breaking down what's in my doc. Now, our CTO, Ryke, did one of these videos not too long ago and there's a lot of overlap in our setups. So I'll try to cover some of the apps that he didn't mention, but if you haven't checked out his video, definitely give it a watch to see what he's running. Alright.\u003C/p>\n\u003Cp>So let's dive in. Right. Onto, like, my main squeezes, the daily drivers. First up has got to be Missive. Hands down, the only email app you'll ever need.\u003C/p>\n\u003Cp>I've been using it for years. Now what makes it special? Well, I can manage both work and personal inboxes in a single app. That's the biggest thing. No more bouncing between Gmail tabs or different applications.\u003C/p>\n\u003Cp>And, you know, if you're working with a team, the collaboration features are killer, especially if you're just sharing inboxes with said team. Alright. Next up is gonna be Raycast. I use that for navigating and launching apps, and I was an Alford user for a lot of years. Even built a few plugins for that, but honestly Raycast blows it out of the water.\u003C/p>\n\u003Cp>Quick app switching, the clipboard history is probably what I use most. It's just become one of those tools that I can't imagine working without anymore. I do pay for the Pro plan, but, honestly, I don't use the AI features a ton because the experience is just a little clunky compared to some of the dedicated apps. For API work I'm using Bruno. If you've caught any of my 100 Apps one hundred Hours episodes, you've probably seen me using it to make API calls.\u003C/p>\n\u003Cp>It's a great open source alternative to Postman. The interface is a lot cleaner, and it's been super reliable for me. I've also recently switched to Orb Stack as a replacement for Docker Desktop. It seems to be a lot lighter on resources, it starts up a lot faster for me, and it it really just feels more native. So definitely give it a look.\u003C/p>\n\u003Cp>Now, on to videos, which is what I get asked about most. So, like, my setup, I get questions on all the time on the YouTube channel, both privately in the Discord community and sometimes via email. We do a lot of different styles of videos, so I'm gonna do a quick breakdown here of what I'm using. As far as the video apps, Loom is my go to for sharing quick updates with the Directus Core team or within the Directus community. If you need to explain a bug or show how something works, just click Record, boom, I get a link to share and then I'm done.\u003C/p>\n\u003Cp>That's it. For those UI focused recordings where you see me zipping around the screen, with all the slick animations, I'm using Screen Studio. It automatically adds those smooth zooms and highlights, and it makes just UI demos way more engaging. 99% of the time audio is off for those videos. When I need something more robust for longer form content, I'm using ScreenFlow.\u003C/p>\n\u003Cp>The editing capabilities within it are super quick and lightweight. It's perfect for me to put out, quick but yet still polished videos. Most of the time though, I'm exporting for our main man, Nat, who is our editor. And, Nat, you should probably edit yourself in here taking a battle somewhere because you are freaking amazing. And then the little mouse highlight pointy thing that everybody asks about, that's Mouse Pose.\u003C/p>\n\u003Cp>It's a nice simple little tool with a hot key. It makes following those cursor movements so much easier for viewers and I've been using it for so long, like, using it to explain stuff has become second nature to me. As far as the video gear that I'm using, on the hardware side, my mic is the Rode VideoMic NTG. It's a bit older, maybe like five, six years old, but the sound quality is incredible for the price point, and I can use it both on my camera or mounted on my desktop here. The headphones that you always see me in are Sony WH-1000XM5s.\u003C/p>\n\u003Cp>I recently upgraded because my dog got a hold of the old pair. These are pretty pricey, but, I've got three little girls so the noise cancellation is definitely worth it to me. Everything plugs into a CalDigit TS USB hub. I've got the TS three plus. There's a newer version available, but this one has worked for me for years.\u003C/p>\n\u003Cp>I still can't get to that one cable nirvana though because I've got two of these, LG five ks displays and my MacBook Pro doesn't run all of that through a single cable. For the camera, I've got a Sony a 6,400 with a Sigma sixteen millimeter lens. That's what gives me that nice bokeh effect that you see in the background. All that is connected through an Elgato Cam Link four k, which converts the HDMI signal to USB and lets me plug that into the computer. The mood lights in the background, those are Govee light bars.\u003C/p>\n\u003Cp>I think that's how you pronounce it. I have their iPhone app so I can just change the vibe depending on what I'm recording or, you know, sometimes my mood that particular day. If it's Christmas, I can turn on Christmas lights. Amazing. Alright.\u003C/p>\n\u003Cp>So for a little more spicier territory, AI. Right? You've probably seen me use AI in some of the hundred apps, hundred hours episodes, if you've caught any. But here's what I'm actually using day to day. Claude has become my daily driver.\u003C/p>\n\u003Cp>It's part of my workflow in some form just about every single day. I could be using it for, like, creating ASCII art for a rabbit that I need for a CLI app. Don't judge me. Or summarizing documents or content that I don't have time to read. Recently used it for, like, health insurance research.\u003C/p>\n\u003Cp>Or, you know, work related. I'm writing meta descriptions for blog posts or, Directus TV episodes. I'm also using Cursor for coding, which, you know, I have a love hate relationship with at the moment. Auto completion works amazingly well probably 75, 80 percent of the time for what I use it for. But most of the LLMs still have the older Directus SDK syntax memorized, so you have to prompt it a bit to pull that out of it.\u003C/p>\n\u003Cp>The agent feature in cursor is is interesting. You know, I've used it on some greenfield projects or some new features. With existing code bases, though, it's kinda been a bit of a mixed bag for me. Also AI wise, I've been playing a lot with replicate. I don't have a ton of time.\u003C/p>\n\u003Cp>I've got three little girls. So, like, setting up all these models and trying to run them locally for me is is not an option or just something I'm not willing to commit to. So, for image generation, I've been playing around with the Flux models. So if you've seen any weird AI generated images, from me, that's where they're coming from. I like Replicate because it's quick and easy to experiment, and I've even run a couple of fine tunes using their platform.\u003C/p>\n\u003Cp>So that's it. You know, the tools I use mostly just to help me get the job done quickly. I'll see you in the community and on Directus TV. I'm definitely gonna invoke rule number two here. And I'm going to go into Directus Cloud and you can call this cheating, you can call this taking advantage of what we've already built previously, but we are going to do a new project using our simple CMS template.\u003C/p>\n\u003Cp>If I bring up my little mouse pointer tool here, it's called Mouse Pose by the way. I think that is like 90% of modern JavaScript development is wrestling with dependencies and bundlers and config. Why go with four? To me, I I hate giving people a middle ground. Right?\u003C/p>\n\u003Cp>So if we have bad or, let's say, the worst, bad, and then good and great, there's no middle ground. Right? So you gotta get off the fence. Hey. That's the way the cookie crumbles sometimes.\u003C/p>\n\u003Cp>I'm not sure what I am doing wrong with this. Feel free to steal this password here because this project should be turned off by the time we get to airing this actual episode. I'm just gonna create a new component. We'll call it feedback. Should we call it widget?\u003C/p>\n\u003Cp>Love widgets. Who doesn't love widgets? This is the personalized content engine. Website personalization engine. Badabing badaboom.\u003C/p>\n\u003Cp>This is beautiful. Right? I've got no idea whether we're actually going to be able to, like, push this one across the finish line or not. So that should be exciting for this episode. Filnaughty.\u003C/p>\n\u003Cp>Filnaughty just typing that out. And then we have the nice list. Create a strong password. Why do I have to create a strong password? Come on, dog.\u003C/p>\n\u003Cp>Why is it asking me to do this? I'm not sure. I'm sure somebody could figure out how to get access to my local host. I know we got a lot of really great hackers out there in the community. This is gonna be Site B.\u003C/p>\n\u003Cp>Alright. The other site. The site that I don't like. Site B. Don't even care about it enough to give it a nice name.\u003C/p>\n\u003Cp>Everything is installed. PMPM dev. I think we need like a blooper reel, but maybe that would be every episode that resulted in just non stop bloopers. We'll delete all of these fields that are no longer global in our data model. And today's exes episode is is really just a, a big exercise in data modeling.\u003C/p>\n\u003Cp>Alright. Delete. Delete. Delete. And this is how you know that these things aren't scripted because if it was, I would be way more organized than this.\u003C/p>\n\u003Cp>Boom. I've got a REST API. Magic happens. Sparkles fall from the sky, etcetera. Sometimes you win, sometimes you lose.\u003C/p>\n\u003Cp>Just gotta keep rolling the dice. Alright. That's it for this episode of hundred apps, hundred hours. We'll catch you on the next one. Thanks for joining.\u003C/p>\n\u003Cp>Speaker 0: Amazing. And all 10 episodes of 100 apps one hundred hours season three. So there's over 30, episodes for you at directorsi0/tv, and it's the first one. I made it the first one, when I uploaded it, so you should have no worries finding it. But thank you so much for Brian for taking us through both what is in his doc and also, the full a hundred apps, a hundred hours season three.\u003C/p>\n\u003Cp>Do go check them out. He's a very entertaining person. It's it's gonna be good. So, next up, we have episode one of another, brand new director's TV, show, which is uncharted territory, and that is we're learning how to use geospatial data with Directus. So I'm gonna hand it over to Carmen to take you through episode one.\u003C/p>\n\u003Cp>Speaker 1: This is my Directus project for tracking all of my hiking activity. And as you can see, I've got a collection called hikes, which is currently empty. Let's take a look at its structure by going to settings, data model, and hikes. Now, here we can see we've got two fields in our hikes collection. But I'd love to show on a map where my hike took place.\u003C/p>\n\u003Cp>So what we're gonna do is create a new field, make it of type map, and call it location. And we can see right now that the type is set to point. But as it turns out, there's lots of types of map data. And in this episode, we're gonna cover each and every one of them. So let's start with point.\u003C/p>\n\u003Cp>I'm gonna save this field and then go and create a hike. Gonna click on create item. Date set to today, and I'll set my location to be in this part of Vienna. So that's what the point type is. It lets us set a single point on a map.\u003C/p>\n\u003Cp>If we take a look at our collection, we'll see we have our type set to point and our coordinates set to these coordinates. Of course, this doesn't look as nice, but we'll cover the layout thereof in another episode. But a point is nice, but a hike is more of a, you know, a journey along a line. What I'm gonna do is create that map type location again, but this time set the type to line string. Go ahead and save that.\u003C/p>\n\u003Cp>And let's try again. Set the date to today. And go for a hike somewhere in France. And what I can do is by setting a certain number of points, create this line that indicates my hiking journey. So now we can see that we have a series of coordinates, which is good.\u003C/p>\n\u003Cp>But what about the other types? Let's once again create that location field and this time set the type to be a polygon. Let's go to Slovakia. So what I can do here is once again, by clicking around, I can now set a polygon to denote which area I've covered with my hike. Go ahead and save that.\u003C/p>\n\u003Cp>And we can see once again, the coordinates are set accordingly. Now let's try the multi point type. Go ahead and create a new hike. Now with multi point, I can set a variety of points. Next let's try the multiline string.\u003C/p>\n\u003Cp>Let's go to The United States. Now with a multiline string, similar to the line string itself, I can now have several strings. The multi polygon location allows us to create multiple polygons on a map. Let's give that a try. Let's go to Argentina.\u003C/p>\n\u003Cp>And as you can see, I can create multiple polygons in a map. Let's try the geometry all option. I'm gonna save this and create a new hike. Now what the geography all option lets you do is mark all kinds of points. So we can have points, we can have polygons, and we can have lines.\u003C/p>\n\u003Cp>Let's cover what the rest of the types look like. First, there's json. And json looks exactly like a geometry all object, but stored as json. A string is also a geometry all object stored as a string of characters, a text. You guessed it.\u003C/p>\n\u003Cp>Also a geometry all object, but stored as text. And CSV is a geometry object, but stored as CSV or comma separated values. How can I best store my hike? Now, as we said towards the beginning of this, the line string is really going to be my best bet because it's a series of points that I follow during my hike. So these are the different types in which we can store that GeoJSON mapping data in DirectUs.\u003C/p>\n\u003Cp>Speaker 4: We want to take a moment towards the end of the change log for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been two contributors. A huge thank you to Chiyako for fixing a marketplace extension detail page back button and Gerard for removing a duplicated key validation logic from update by query. Thank you again. You can see the specific pull requests inside of the full release notes on GitHub.\u003C/p>\n\u003Cp>Lastly, we also want to take the time to thank our GitHub sponsors of February who financially contribute to Directsys development. A huge thank you to Wayfan, Entel, Mike, Fergus, Omar, Marcus, Peter, Utomic, Steven, Robson, Nonlinear, Andreas, John, Khan, Biab, Adam, Jason, Birka, Vincent, CK, Valentino, and Jens. The money we are given from our GitHub Sponsors goes straight back to community members who build tooling and extensions for the directors ecosystem. Thank you again for being part of that. For this month's reading list, we're following on from changing up a bit like last month with the audio special and are coming to you with video recommendations coming from FODSTEM, the free and open source software developers European meeting that took place last month.\u003C/p>\n\u003Cp>There are recordings from lots of different tracks including community, data analytics, inclusive web, security, tool the docs and so many others. To call out three of the recordings, there's alternative text for images text anyway from Mike Gifford, lessons learned open sourcing The UK's COVID tracing app from Terence Eden, and beyond the readme, crafting a better developer Experience for Open Source Projects from Lorna Mitchell. There's a seriously impressive volume of resources available to watch at fosdem.org, so we recommend you go check them out.\u003C/p>\n\u003Cp>Speaker 0: Alright. That is it for March's the changelog. If you are still here, thank you so much for taking the time to hang out with us. Hopefully, you found something useful and something that excites you for the day. Have a great rest of your day.\u003C/p>\n\u003Cp>In the meantime, as I said at the beginning, if you are free on the March 20 and want to join our workshop with Ingest, I have just posted the link in the chat. If you're not, in the Direct to CV chat live, you can also find it in the events tab on Discord. Have a great rest of your day, and hopefully see you for the next one. Take care, everyone. Have a good one.\u003C/p>\n\u003Cp>Bye.\u003C/p>","Alright. Hello, everyone. Hopefully, you are having a great day. If you're new here, I'm Beth, and I am here to take you through what is new with Directus in March. We have a really great show for you today. We have a lot of Brian. We're very lucky. He will be taking us through what his working setup is in a special edition of what's in your dock. We also have a brand new episode one of uncharted territory, a brand new director's TV show. But first, I have an invite for you. So if you are free on the March 20, we are hosting a workshop with Ingest called building advanced content workflows. And in it, you can learn how to build an automated translation system using direct us in ingest that you can implement immediately. It is on the March 20. And if you are in our Discord, you can see it with the little events tab on the there. First of all though I'm gonna take you through to Carmen who has got the product updates for you, for this month. Hey, everyone. Carmen here to tell you about what we've shipped in Directus in the last month or so with eleven point five point zero and eleven point five point one. We've added numerous small improvements and bug fixes. And in this section, I'm gonna highlight two of these to draw your attention. Firstly and importantly, we have a breaking change to bring to your attention. There is a changed error message when a flow condition operation fails, And we've added partial Prometheus supports for your monitoring needs. Currently, we support the pull method via the metrics endpoint. Metrics generated can be controlled by a CSV of services to observe using the metric services environment variable. So that's what we've released in the last month. Be sure to keep up with releases on our documentation at directus.i0/docs. And if you have any questions or feedback, be sure to join us on Discord. This month, we've added two different tutorials to our documentation in four frameworks each, Next. Js, Astro, SvelteKit, and Nuxt. So, yeah, we've got eight new articles. These are on implementing multilingual content using Directus and the framework and rendering dynamic blocks using framework. You can check them out at directus.i0/docs forward /tutorials forward slash getting dash started. Hello. I'm Mike, and I'm from the marketing team. I'm gonna be here to talk to you about all the latest extensions that have been released in the Director's Labs org on GitHub. Just as a reminder, this org is where we publish regularly new experimental extensions with quality of life or feature improvements that could be used. First, we're gonna be talking about the field comments module. First, what we need to do is connect it to a collection. In this case, I'm gonna attach it to our employees collection. We can enable it on all fields by default, or we can select specific fields we wish to be able to comment against. When we add an official record, so for this, I'll be adding myself. I am the developer experience engineer. I do things with extensions. You'll notice how there's no additional information or anything here. Once the record is created, we can go back in, and you'll notice how there are now additional comments sections that we can add. So in this case, at admin user, is this person actually the dev ex engineer? Once we submit this, we'll be had a comment to that field, and it'll tag accordingly how many comments are available. This also uses the existing commenting, feature of directors. So if you tag somebody, etcetera, they will receive a notification about it. And as an aside, any field level comment is completely isolated to its field and doesn't appear in the item level comments. The next extension we're talking about is the SEO plugin. We can configure this quickly with templates for both the title, the meta description, and we can enable additional functionality such as sitemap controls for how often things are going to be updating our sitemap, search engine controls for things such as no follow and no index, as well as adding the social media image for graphs. I'm going to just quickly skip that one so I don't have to attach an image. Add this to our data model. Once we are back in our data model, you'll be able to see that we have our content as well as our new fields for SEO. So, okay. Alsmore is the DevX engineer. Mike those things with extensions for directors. And you'll notice how we're now getting a lovely preview with some help controllers, so we don't want this to be followed, but we do want it to be indexed. And now we can save this. This extension that we'll be looking at is the WYSIWYG add edit file link. So if we create an item, this is the selected field. There is a new add edit file link button. So if we have some content and we want to insert a file, for example, we can grab off my desktop a text file, add it, the transcript of the meeting, and we can have it open in a new field. This image, preview doesn't work as it's not an image, but we add this, and we'll have the transcript to the new meeting as a file. We can also then go in, revise it, and change anything. The complete just as if we were editing the normal link, we can also and just to double check, we can also upload an image. Director's logo, which will have the preview and allow us to insert it with the download option. And they look like so, with the complete URL through to the assets library locally. The final module for this month is going to be the migrate module. Here you can see I have the migrate modules interface, and the Directus instance I'm going to send it to. This is, my local instance, and this is a remote cloud instance. As you can see here, there is no content, no collections available, but we have a collection available here. So I'm just gonna quickly grab a static token, as the module requires a authorization token to interact with the client. Don't worry. I'll recycle this afterwards so that nobody can use it. Save that. Going to grab our domain for the client. Now we can really check to see if it is compatible. And you'll see here that there there is a difference. My local is running 11.4, and the remote is 11.51. We can force this through. I'm going to now. Or we can use this as an opportunity to run any upgrades, etcetera, to make sure everything is aligned, especially if there is a major difference like version 10 or any of the larger schema changes internally. So we're gonna force this, and we don't want to copy over the users because I already have an admin user over in my remote. So we are now going to start the dry run, and it's going to create a snapshot and create collection options. This may take a moment. We're also able to preview every one of the files created as part of the migration, all the individual components that make it up. Now to actually do the migration, we apply our key and our domain. We are once again gonna have to force it through, and we remove the driver and tag. This way, it's not just building it and running locally. It is pushing up to the remote instance. So just to validate again, we don't have a collection here. I'm gonna start the migration process. And now we can see that the migration is complete, but it has skipped the users as we already have an admin user. Now if I reload the content, we will have our employee collection with me, the developer experience engineer, with all the relevant information internally. The only thing that's missing is this instance will now need to be configured with the correct extensions for it to operate as expected. Alright. Hopefully, you found those interesting. Mike, I don't know if you're in the chat, but what is your keyboard? It's clicky, it's a chef's kiss. Very nice. It's very satisfying. If you are planning on using anything that was just mentioned or you have any questions, let us know. A few of us are hanging around in the chat so we can see them and answer your questions. Or if you are catching this on demand, let us know in Discord, and we'll see what we can do. It is time for the first of Brian's sections. So he is gonna be talking us through what is in your doc. And if you haven't caught that on the director's TV already, we have a bunch of cool people with very interesting jobs tell us what they are using in their day to day setup. And so here is Bryant's. Hey. Hey. Bryant here from Directus, and I I guess today I'm actually breaking down what's in my doc. Now, our CTO, Ryke, did one of these videos not too long ago and there's a lot of overlap in our setups. So I'll try to cover some of the apps that he didn't mention, but if you haven't checked out his video, definitely give it a watch to see what he's running. Alright. So let's dive in. Right. Onto, like, my main squeezes, the daily drivers. First up has got to be Missive. Hands down, the only email app you'll ever need. I've been using it for years. Now what makes it special? Well, I can manage both work and personal inboxes in a single app. That's the biggest thing. No more bouncing between Gmail tabs or different applications. And, you know, if you're working with a team, the collaboration features are killer, especially if you're just sharing inboxes with said team. Alright. Next up is gonna be Raycast. I use that for navigating and launching apps, and I was an Alford user for a lot of years. Even built a few plugins for that, but honestly Raycast blows it out of the water. Quick app switching, the clipboard history is probably what I use most. It's just become one of those tools that I can't imagine working without anymore. I do pay for the Pro plan, but, honestly, I don't use the AI features a ton because the experience is just a little clunky compared to some of the dedicated apps. For API work I'm using Bruno. If you've caught any of my 100 Apps one hundred Hours episodes, you've probably seen me using it to make API calls. It's a great open source alternative to Postman. The interface is a lot cleaner, and it's been super reliable for me. I've also recently switched to Orb Stack as a replacement for Docker Desktop. It seems to be a lot lighter on resources, it starts up a lot faster for me, and it it really just feels more native. So definitely give it a look. Now, on to videos, which is what I get asked about most. So, like, my setup, I get questions on all the time on the YouTube channel, both privately in the Discord community and sometimes via email. We do a lot of different styles of videos, so I'm gonna do a quick breakdown here of what I'm using. As far as the video apps, Loom is my go to for sharing quick updates with the Directus Core team or within the Directus community. If you need to explain a bug or show how something works, just click Record, boom, I get a link to share and then I'm done. That's it. For those UI focused recordings where you see me zipping around the screen, with all the slick animations, I'm using Screen Studio. It automatically adds those smooth zooms and highlights, and it makes just UI demos way more engaging. 99% of the time audio is off for those videos. When I need something more robust for longer form content, I'm using ScreenFlow. The editing capabilities within it are super quick and lightweight. It's perfect for me to put out, quick but yet still polished videos. Most of the time though, I'm exporting for our main man, Nat, who is our editor. And, Nat, you should probably edit yourself in here taking a battle somewhere because you are freaking amazing. And then the little mouse highlight pointy thing that everybody asks about, that's Mouse Pose. It's a nice simple little tool with a hot key. It makes following those cursor movements so much easier for viewers and I've been using it for so long, like, using it to explain stuff has become second nature to me. As far as the video gear that I'm using, on the hardware side, my mic is the Rode VideoMic NTG. It's a bit older, maybe like five, six years old, but the sound quality is incredible for the price point, and I can use it both on my camera or mounted on my desktop here. The headphones that you always see me in are Sony WH-1000XM5s. I recently upgraded because my dog got a hold of the old pair. These are pretty pricey, but, I've got three little girls so the noise cancellation is definitely worth it to me. Everything plugs into a CalDigit TS USB hub. I've got the TS three plus. There's a newer version available, but this one has worked for me for years. I still can't get to that one cable nirvana though because I've got two of these, LG five ks displays and my MacBook Pro doesn't run all of that through a single cable. For the camera, I've got a Sony a 6,400 with a Sigma sixteen millimeter lens. That's what gives me that nice bokeh effect that you see in the background. All that is connected through an Elgato Cam Link four k, which converts the HDMI signal to USB and lets me plug that into the computer. The mood lights in the background, those are Govee light bars. I think that's how you pronounce it. I have their iPhone app so I can just change the vibe depending on what I'm recording or, you know, sometimes my mood that particular day. If it's Christmas, I can turn on Christmas lights. Amazing. Alright. So for a little more spicier territory, AI. Right? You've probably seen me use AI in some of the hundred apps, hundred hours episodes, if you've caught any. But here's what I'm actually using day to day. Claude has become my daily driver. It's part of my workflow in some form just about every single day. I could be using it for, like, creating ASCII art for a rabbit that I need for a CLI app. Don't judge me. Or summarizing documents or content that I don't have time to read. Recently used it for, like, health insurance research. Or, you know, work related. I'm writing meta descriptions for blog posts or, Directus TV episodes. I'm also using Cursor for coding, which, you know, I have a love hate relationship with at the moment. Auto completion works amazingly well probably 75, 80 percent of the time for what I use it for. But most of the LLMs still have the older Directus SDK syntax memorized, so you have to prompt it a bit to pull that out of it. The agent feature in cursor is is interesting. You know, I've used it on some greenfield projects or some new features. With existing code bases, though, it's kinda been a bit of a mixed bag for me. Also AI wise, I've been playing a lot with replicate. I don't have a ton of time. I've got three little girls. So, like, setting up all these models and trying to run them locally for me is is not an option or just something I'm not willing to commit to. So, for image generation, I've been playing around with the Flux models. So if you've seen any weird AI generated images, from me, that's where they're coming from. I like Replicate because it's quick and easy to experiment, and I've even run a couple of fine tunes using their platform. So that's it. You know, the tools I use mostly just to help me get the job done quickly. I'll see you in the community and on Directus TV. I'm definitely gonna invoke rule number two here. And I'm going to go into Directus Cloud and you can call this cheating, you can call this taking advantage of what we've already built previously, but we are going to do a new project using our simple CMS template. If I bring up my little mouse pointer tool here, it's called Mouse Pose by the way. I think that is like 90% of modern JavaScript development is wrestling with dependencies and bundlers and config. Why go with four? To me, I I hate giving people a middle ground. Right? So if we have bad or, let's say, the worst, bad, and then good and great, there's no middle ground. Right? So you gotta get off the fence. Hey. That's the way the cookie crumbles sometimes. I'm not sure what I am doing wrong with this. Feel free to steal this password here because this project should be turned off by the time we get to airing this actual episode. I'm just gonna create a new component. We'll call it feedback. Should we call it widget? Love widgets. Who doesn't love widgets? This is the personalized content engine. Website personalization engine. Badabing badaboom. This is beautiful. Right? I've got no idea whether we're actually going to be able to, like, push this one across the finish line or not. So that should be exciting for this episode. Filnaughty. Filnaughty just typing that out. And then we have the nice list. Create a strong password. Why do I have to create a strong password? Come on, dog. Why is it asking me to do this? I'm not sure. I'm sure somebody could figure out how to get access to my local host. I know we got a lot of really great hackers out there in the community. This is gonna be Site B. Alright. The other site. The site that I don't like. Site B. Don't even care about it enough to give it a nice name. Everything is installed. PMPM dev. I think we need like a blooper reel, but maybe that would be every episode that resulted in just non stop bloopers. We'll delete all of these fields that are no longer global in our data model. And today's exes episode is is really just a, a big exercise in data modeling. Alright. Delete. Delete. Delete. And this is how you know that these things aren't scripted because if it was, I would be way more organized than this. Boom. I've got a REST API. Magic happens. Sparkles fall from the sky, etcetera. Sometimes you win, sometimes you lose. Just gotta keep rolling the dice. Alright. That's it for this episode of hundred apps, hundred hours. We'll catch you on the next one. Thanks for joining. Amazing. And all 10 episodes of 100 apps one hundred hours season three. So there's over 30, episodes for you at directorsi0/tv, and it's the first one. I made it the first one, when I uploaded it, so you should have no worries finding it. But thank you so much for Brian for taking us through both what is in his doc and also, the full a hundred apps, a hundred hours season three. Do go check them out. He's a very entertaining person. It's it's gonna be good. So, next up, we have episode one of another, brand new director's TV, show, which is uncharted territory, and that is we're learning how to use geospatial data with Directus. So I'm gonna hand it over to Carmen to take you through episode one. This is my Directus project for tracking all of my hiking activity. And as you can see, I've got a collection called hikes, which is currently empty. Let's take a look at its structure by going to settings, data model, and hikes. Now, here we can see we've got two fields in our hikes collection. But I'd love to show on a map where my hike took place. So what we're gonna do is create a new field, make it of type map, and call it location. And we can see right now that the type is set to point. But as it turns out, there's lots of types of map data. And in this episode, we're gonna cover each and every one of them. So let's start with point. I'm gonna save this field and then go and create a hike. Gonna click on create item. Date set to today, and I'll set my location to be in this part of Vienna. So that's what the point type is. It lets us set a single point on a map. If we take a look at our collection, we'll see we have our type set to point and our coordinates set to these coordinates. Of course, this doesn't look as nice, but we'll cover the layout thereof in another episode. But a point is nice, but a hike is more of a, you know, a journey along a line. What I'm gonna do is create that map type location again, but this time set the type to line string. Go ahead and save that. And let's try again. Set the date to today. And go for a hike somewhere in France. And what I can do is by setting a certain number of points, create this line that indicates my hiking journey. So now we can see that we have a series of coordinates, which is good. But what about the other types? Let's once again create that location field and this time set the type to be a polygon. Let's go to Slovakia. So what I can do here is once again, by clicking around, I can now set a polygon to denote which area I've covered with my hike. Go ahead and save that. And we can see once again, the coordinates are set accordingly. Now let's try the multi point type. Go ahead and create a new hike. Now with multi point, I can set a variety of points. Next let's try the multiline string. Let's go to The United States. Now with a multiline string, similar to the line string itself, I can now have several strings. The multi polygon location allows us to create multiple polygons on a map. Let's give that a try. Let's go to Argentina. And as you can see, I can create multiple polygons in a map. Let's try the geometry all option. I'm gonna save this and create a new hike. Now what the geography all option lets you do is mark all kinds of points. So we can have points, we can have polygons, and we can have lines. Let's cover what the rest of the types look like. First, there's json. And json looks exactly like a geometry all object, but stored as json. A string is also a geometry all object stored as a string of characters, a text. You guessed it. Also a geometry all object, but stored as text. And CSV is a geometry object, but stored as CSV or comma separated values. How can I best store my hike? Now, as we said towards the beginning of this, the line string is really going to be my best bet because it's a series of points that I follow during my hike. So these are the different types in which we can store that GeoJSON mapping data in DirectUs. We want to take a moment towards the end of the change log for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been two contributors. A huge thank you to Chiyako for fixing a marketplace extension detail page back button and Gerard for removing a duplicated key validation logic from update by query. Thank you again. You can see the specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub sponsors of February who financially contribute to Directsys development. A huge thank you to Wayfan, Entel, Mike, Fergus, Omar, Marcus, Peter, Utomic, Steven, Robson, Nonlinear, Andreas, John, Khan, Biab, Adam, Jason, Birka, Vincent, CK, Valentino, and Jens. The money we are given from our GitHub Sponsors goes straight back to community members who build tooling and extensions for the directors ecosystem. Thank you again for being part of that. For this month's reading list, we're following on from changing up a bit like last month with the audio special and are coming to you with video recommendations coming from FODSTEM, the free and open source software developers European meeting that took place last month. There are recordings from lots of different tracks including community, data analytics, inclusive web, security, tool the docs and so many others. To call out three of the recordings, there's alternative text for images text anyway from Mike Gifford, lessons learned open sourcing The UK's COVID tracing app from Terence Eden, and beyond the readme, crafting a better developer Experience for Open Source Projects from Lorna Mitchell. There's a seriously impressive volume of resources available to watch at fosdem.org, so we recommend you go check them out. Alright. That is it for March's the changelog. If you are still here, thank you so much for taking the time to hang out with us. Hopefully, you found something useful and something that excites you for the day. Have a great rest of your day. In the meantime, as I said at the beginning, if you are free on the March 20 and want to join our workshop with Ingest, I have just posted the link in the chat. If you're not, in the Direct to CV chat live, you can also find it in the events tab on Discord. Have a great rest of your day, and hopefully see you for the next one. Take care, everyone. Have a good one. Bye.","7a174565-9bb1-48a3-9fe6-0409d03b3829",[310,311,312,313],"066bb544-334d-4408-a34d-60c4120f8dd5","d3910456-5949-4910-b4e2-53c20f6ddd1b","ff03f68f-3289-47f8-ad51-bf2caee18bbb","7873b288-47b7-42e2-ba27-c1f73f25f5a6",[],{"id":139,"number":140,"show":122,"year":141,"episodes":316},[143,144,145,146,147,148,149,150],{"id":146,"slug":318,"vimeo_id":319,"description":320,"tile":321,"length":263,"resources":8,"people":8,"episode_number":322,"published":323,"title":324,"video_transcript_html":325,"video_transcript_text":326,"content":8,"seo":327,"status":130,"episode_people":328,"recommendations":333,"season":334},"april-2025","1072484710","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month includes new extensions such as an Algolia Operation, a GitHub Operation and an Elasticsearch Operation, a look into the new Visual Editor beta module and an episode of the Joy of Theming with Bry Ross.","567bc407-9a1a-4f35-98c4-4e2b9e18348c",9,"2025-04-08","April 2025","\u003Cp>Speaker 0: Hello, everyone. Happy April. I'm Beth, and I'm gonna be taking you through the change log. I hope you're all having a great start to the month. If you are new here or you've been here before, welcome.\u003C/p>\u003Cp>Welcome. Thank you so much for spending your time with us. About what we've got going on. If you've got any questions, do let us know in chat if you're live or in Discord later. And with that, I'm gonna send you over to Carmen with the product updates for the month.\u003C/p>\u003Cp>Speaker 1: Thank you, Beth. And hey, everyone. Carmen here to tell you about what we've shipped in Directus in the last month or so with 11.6 o and eleven point six point one. And not only have we added numerous small improvements and bug fixes, we've got two highlights that I'd love to draw to your attention today. So first, I wanted to bring your attention to a potential breaking change.\u003C/p>\u003Cp>In the latest version of Directus, we've introduced a fix for flows. This is going to affect how action hooks pass on final payloads. Now, in the past, there was a bug that original payloads would be provided in the action hook. However, moving forward, this behavior has been rectified so that the final payload, that is after the filter hook and preset changes, is now passed down to the action hook. Next, and something we feel is quite exciting, is we've added the visual editor module beta.\u003C/p>\u003Cp>Florian is going to join the change log later on to tell you more about that. Next, let's hear about extensions from Mike.\u003C/p>\u003Cp>Speaker 2: Hi. I'm Mike, and I'm here to talk you through the extensions for this changelog. These are from the Director's Labs. Director's Labs is a GitHub org where we publish new extensions with additional functionality or experiments for you to try in your projects. This extension is the Elasticsearch operation.\u003C/p>\u003Cp>As you can see here, we have a create and delete flow. We also have an elastic instance with no indices currently. So firstly, in the create flow, we have an action which is on every create items in the collection posts, then it's gonna forward to our Elasticsearch operation. Here, you'll notice we've configured the remote Elasticsearch instance with the API key. I will be deleting those afterwards just in case.\u003C/p>\u003Cp>You can also define the collection dynamically, so the index created within Elasticsearch will be dynamically created. So each collection can have its own. You can have them prefix, suffix, or you can have a shared index for multiple collections. In this instance, we haven't we're using the create action so that it's going to add additional documents to the index with our key and the constructed data we wanna send over. This allows us to define what information we do or do not want to share from any given item to the index.\u003C/p>\u003Cp>So just to test, we are going to go and add another document. So here we're gonna go, hello world new search in Elasticsearch. What is Elasticsearch and what's the data sent? I'm gonna just put it as published because I can. And again adding a image from our library.\u003C/p>\u003Cp>Let's pick the Fusion Lead Director's logo actually, and save. So we have now saved our item. We're gonna go over to our index, our post index with one new document. If we go in, we can then see that we have our document with its title and its content, but because we didn't send over the hero image, it doesn't contain it. And we can also do the same with delete.\u003C/p>\u003Cp>So we delete the item from here. There we go. We have deleted the item, and that should delete from our index, which is brilliant. We can also update and document within the index as and when it happens. This is the Algolia operation.\u003C/p>\u003Cp>As you can see here, currently we have no indexes within Algolia. If we go over to our directors instance, currently looking at the flow for search indexes and we're going to be doing one for the creation of a item within the index. With this, we've got our event hook, which is an action on any time we create a update within the post collection. We could increase that to all other collections as with any other. And if we go inside of our creation, we can see we provide it with the application ID and the API key for Algolia.\u003C/p>\u003Cp>We can also define the index itself either dynamically as a collection. We can prefix, suffix, or have a step set index for all information being sent over to Algolia, say, as a centralized index. We also get to do an upsert as well as a patch update, delete, retrieve, and a search operation. In this case, we're going to be doing post creation rather than an upsert just for simplicity. And in this instance, we have our post collection with a title, content, and hero image, but we're only sending over the two item types.\u003C/p>\u003Cp>If we create a new post, so this is an item for Algolia. Algolia is very powerful for search within a site. We save this, and it should send over to Algolia. And we can now see that we have our posts index, and we sent over the information as is from our instance. This also means it's within any of the Algo linear interfaces we decide to put on the front end.\u003C/p>\u003Cp>Now we also have our delete flow, and within this case, we are setting the same information, but we can delete multiple items at once. So it has to be the keys rather than key as the attribute for the object ID, just how our Golia references the information. I'm going to clear changes, discard changes, go back, Delete our object. So we go over to our index, refresh it, And we should have an index, but with no records available. This is the open search operation.\u003C/p>\u003Cp>Much like with the other operations, this allows us to trigger a response like any other flow. So we have our event hook here where an action, a create item from the collections post, it is going to send over to OpenSearch with this host based upon the collection as the index and using the key for the item as the item ID for managing update creation reads on the open search side. So we will quickly just discard changes. Open search. Open search powers.\u003C/p>\u003Cp>The AWS search functionality. And we're gonna sit may as well, just for the sake of it, publish, save. And if we check open discover the dashboard for OpenSearch, even with the index post, we haven't got anything currently. Reload it, and we should have our object here with our content. OpenSearch powers the AWS search functionality of search title.\u003C/p>\u003Cp>I've then got a matching flow for deleting. So if we delete, it then takes the keys for all the objects that are being manipulated and sends that over as a delete type action. Evola. No more content. This is our new GitHub operation.\u003C/p>\u003Cp>It's designed for operating with GitHub actions and GitHub workflows. As you can see here, we have a trigger with the action for creating, updating, and I will actually open it up to see. We are multiple different types. Any form of change to items within it. We're monitoring the post collection as well as the director's collections for if we add any new collections to it.\u003C/p>\u003Cp>We obviously if we wanted, detect changes within those collections, we'll want to add these collections here. And the actual GitHub operation itself, we are providing it with the owner and repository, a fine grained access token from within the developer settings of the repo in GitHub. We're providing with a event type so that it's associated with a very specific workflow. As you can see on the right hand side, my workflow has the repository dispatch type, which is how it triggers from Webhooks, and a matching content build key so that when the hook is, triggered from Directus, it triggers the correct workflow. Yeah.\u003C/p>\u003Cp>Otherwise, it's a very simple flow for me just to show it off. And if we save this actually, we don't need to save because it's already saved. Clear changes. If we go back to our page and we and we see here, I have plenty of them running from just me testing. But if I create a new one, a new page, and we do, does this trigger GitHub actions, and we save it, we should momentarily get a new GitHub action, which will start.\u003C/p>\u003Cp>So I'm just gonna refresh to see it. There we go. Here is our latest one. It is queued up, and it's running the build state. We're laid off.\u003C/p>\u003Cp>This one doesn't work because I'm running a very outdated version of Next. Js on this project, but we have triggered the correct response. Thanks very much for checking out these extensions. If you have any other questions about these extensions that we've shipped, extensions in general, or how to build them, or if you're having problems with, anything you're trying to build yourself, please feel free to come to the Discord and you can find help in the extensions channel.\u003C/p>\u003Cp>Speaker 1: Let's talk about content. Now in the last month, we've introduced eight new tutorials for working with Directus using different web frameworks. You'll be able to find our tutorials on building dynamic forms and building real time chat applications using Directus in combination with Astro, Next. Js, Nuxt, and SvelteKit. We're always adding more tutorials, so keep an eye out.\u003C/p>\u003Cp>Speaker 0: Amazing. And I've put the link to each of the extensions mentioned in the directors TV live chat. They're also, once again, just in case you missed it, in the DirectorsLabsorg in the extensions repo on GitHub. So amazing. Thank you so much to Carmen and Mike for taking us through those updates.\u003C/p>\u003Cp>As Carmen mentioned, next up, we have Florian going more into detail about the very exciting visual editor.\u003C/p>\u003Cp>Speaker 3: Hey, everyone. I'm Florian, a front end engineer at Directus. I'm here to talk to you about the visual editor which came out in beta with the 11 dot six dot zero release. This new module allows you to visually edit the content of your website directly in place. Now you can edit without ever leaving the visual of what you're working on.\u003C/p>\u003Cp>You can work right in it. Here's a demo as I talk you through the details. Once the visual editor is enabled and a URL is provided, it will appear in the module bar. The visual editor behaves similarly to live preview in that it renders content in an iframe, but with a few important differences. Users can navigate through the website freely and edit any linked element on a page without navigating to the applicable collection.\u003C/p>\u003Cp>Clicking an edit button next to an editable element opens an editor in either a drawer, a modal, or a popover. This editing mode as well as the number and the selection of fields that appear in such an editor can be set using the vision editing library, which web developers need to implement in their website. The library sets up the connection between your website and your director's instance. The studio module is then used to render your website within director studio, make changes in place, and then render those changes as they are made. This is Visual Editor, and it's just the beginning.\u003C/p>\u003Cp>We have big plans for it. If you'd like to give feedback, you can share it in the discord or the visual editing repository.\u003C/p>\u003Cp>Speaker 0: Amazing. Thank you so much to Florian for taking the time to show us more around it. And it is super exciting, we've already seen some love but if you do have things as Florian said that you'd like to give feedback we're here to hear it, we are here to that's such a loop in my brain, we're here to hear it so yeah do let us know if you are intending to use it and if you've got any questions, of course. Now for this month's changelog director's TV episode, we are going into the archive with a joy of theming with Bry Ross who, I cannot stress enough, is definitely definitely not Brian in a wig. So enjoy.\u003C/p>\u003Cp>Speaker 4: Hi, friends. Welcome back to the show. I'm your host, Brian Ross. And today, we're gonna take an extra special trip back to the nineties with you, our friends and friends. Alright.\u003C/p>\u003Cp>So we're gonna be painting a beautiful Central Perk Coffee Company theme. Alright. So let's dive into our theme. First, gonna pull up our project settings and we're going to adjust those. Just a quick little project name and description.\u003C/p>\u003Cp>Your friend's coffee shop. What could be more beautiful for a project descriptor? Alright. So we're gonna paste the URL in there, and we can see that project settings, our name, and descriptor up there at the top. I like to pronounce it descriptor.\u003C/p>\u003Cp>Makes it sound like Thor. Very powerful. But the effect that themes can have are are very powerful, especially on your users. Alright. So let's pull up our color and we're just gonna for our project color, we're gonna grab that green from the Central Perk logo.\u003C/p>\u003Cp>Now that's a good project color. Next, let's add a public foreground and public background. So we'll just look for Central Perk and see if we can just grab a good looking image from from all of our friends here. We're just gonna spread that across the entire background and for the public foreground, we'll just use the same logo. I think that should still look really nice on the login page, don't you?\u003C/p>\u003Cp>Yeah. Great. Now all these techniques that you see me using, you can use these yourself. There's nothing holding you back. You've got the tools.\u003C/p>\u003Cp>Just take the first step. Alright. So we're gonna paint in that first note, that public note. We've got our favicon and now we're ready to start theming. Alright, so I really like this walnut light walnut brown this almond beige color.\u003C/p>\u003Cp>Let's use that for our modules background so we'll just paint that in there at the top. One thing I do see though, I want I want this to match all the way up and down. So I'm just gonna paint a couple strokes there. We're just gonna look for our background color. I see that's the project color.\u003C/p>\u003Cp>We need to fix that, so we're going to go into our custom CSS and just add a little dot module dash bar dash logo class. Make that background transparent. Now you see it. Now you don't. Boom.\u003C/p>\u003Cp>Looks great. Alright, so now for our icons in that module bar. What I want to do, I don't want to be heavy handed. I'm still going to use light strokes for this, but I am going to try and pick up a, like, a darker brown. I'm almost thinking they've got one here on the website, but, I just don't see it.\u003C/p>\u003Cp>Alright. Let's just try a black and see how that works. So we'll just go paint in a black. It's it's too much contrast. It doesn't give me those warm feelings of a of a coffee shop that I'm looking for.\u003C/p>\u003Cp>So let's pull this brown from this wood image. Now one of the other tools that I use, ColorSlurp, terrible name, great product though. Being able to just copy those hex codes for for everything all you see on your screen. Great tool. Stores all those hex codes as well, and then you can quickly bang those in your keyboard.\u003C/p>\u003Cp>Alright. So next, what we wanna do is we want to control our list, our sidebar here. So let's add a background to this. And for this I'm going to use a little tool that I like. We're going to look for the Essential Perk couch color.\u003C/p>\u003Cp>Because if you remember inside this coffee shop there's a big couch that just takes up all the area. So we're going to lift this orange couch and make it our background. Is it weird? Maybe a little bit, but for you folks who didn't live through\u003C/p>\u003Cp>Speaker 0: the\u003C/p>\u003Cp>Speaker 4: nineties, they were a weird time as well. So let's let's lean into it and and embrace the journey, see where this theme takes us. A little unorthodox mixing colors like this, but with your tools at your side and joy in your heart, you can make any theme work. That looks good. So now we've got a nice separation there.\u003C/p>\u003Cp>Let's resolve the icons here. So again, having those set to the project color of green might not be the best idea. So I'm just going to take that detail brush and paint in some foreground Just a white foreground Let's go in and let's try to make this look like a cloth texture as much as we can So I'm just gonna use a little pattern monster here. We're gonna find a pattern. Just gonna keep keep looking through our patterns until we find something that we like.\u003C/p>\u003Cp>Just just browse those patterns. Do we find a pattern that we like? This adjoined diamond pattern reminds me of my grandmother's couch and her kitchen floor at the same time. Amazing. Alright, so let's use that same orange base color and we're just going to dial back the opacity here and then also on the other overlay, let's just switch that from white to black.\u003C/p>\u003Cp>And, again, we're gonna dial in that opacity. Now I think this is a subtle effect that kinda gives a texture that reminds us of the nineties, or at the very least, your grandmother's house. What wonderful memories I'm sure you have there. Alright. So we're just gonna paint the rest of that in and, okay.\u003C/p>\u003Cp>We'll dial back that opacity a little bit just to give this a little more subtle effect. And now I'm gonna pull out that palette knife, and we're just gonna paste this in. We're gonna pull up that CSS. We're gonna copy the URL portion so we've got our data URI. We're just going to paste that into the background and just bring that all the way down.\u003C/p>\u003Cp>Alright. So now we've got this orange symbolic couch in the middle of our theme. Alright. So if we go into our background, we want to add a subtle background, that stark contrast between the white and the orange. There's opportunity there.\u003C/p>\u003Cp>So we're just gonna dial that in a little bit. Again, we're gonna use our color mix. Just paint that in. We're going to blend that almond with 80% white and we get this soft beige. Just invites you in like a warm cup of coffee in the morning.\u003C/p>\u003Cp>Now the last thing that we want to do is dial in our fonts. We're just going to pull this up. We've got a custom font here that looks like a scribble. I quite like this effect. So we're just going to go in to our font face, add that there, and then we're just going to paint this on.\u003C/p>\u003Cp>Paint in a little font family. We're going to call it friends. We're going to call it friends. Yeah, that's nice. Alright.\u003C/p>\u003Cp>Use a light touch. Very important. You want to have a handy hand heavy hand in this. Alright. So then we're gonna go into our fonts under display, and we're just gonna go friends.\u003C/p>\u003Cp>Just gonna add friends in there. Now we can see that at the top and just adjust it a little bit. There we go. Voila. And now we have our coffee shop theme.\u003C/p>\u003Cp>We have our friends and the couch in the middle, and everything is right, Just like it was in the nineteen nineties. Alright. Let's take a look at our public sign in page. And voila. We have our Central Perk theme.\u003C/p>\u003Cp>That's it for this episode of The Joy of Theming. Thank you for joining me. It's through your support that we can continue teaching techniques to help everyone theme. Each of us has a perfect theme inside of us. It's time to let yours out.\u003C/p>\u003Cp>We'll see you.\u003C/p>\u003Cp>Speaker 0: We want to take a moment towards the end of the changelog for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been five contributors. A huge thank you to Subtire Lou for updating utility sort type signature to allow the use of both string and number. Thank you to Collier for adding an implicit for one to many and many to any relations Thank you to Jacob for improving invalid asset transformation parameter value error handling and adding an omit key option to get config from env Thank you to Son for updating the translation key input field overflow And thank you to Dan for adding the ability to map OAuth claim groups to directors roles Thank you again and you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of March who financially contribute to Directus's development a huge thank you to Wayfam, Entel, Mike, Fergus, Omar, Marcus a special thank you to Mission Control for coming on board as an advocate level Peter, Utomic, Steven, Robson, Nonlinear, Andreas, John, Jamaleddin, Burb, Adam, Jason, Birka, Vincent, CK, Valentino, Jens, Wayne and Yannis.\u003C/p>\u003Cp>Thank you again the money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the Director's ecosystem So thank you again for being part of that. Alright. I am such a fan of Bry Ross. And if you also enjoyed that as much as I did, there are lots of other episodes with different themes such as Pampers, American Express. We've got the Simpsons, Home Depot.\u003C/p>\u003Cp>Some say there is nothing, no theme that Bry Ross cannot do. He's a true artist. And, yes, if you haven't been checking out directorstv, directors I 0 Directors.i0/tv, do check it out. There are tons of episodes, across lots of different, topics. If you've not checked it out, there is a lot for you to catch up on so do, I recommend going and seeing it too.\u003C/p>\u003Cp>Thank you so much for joining us. You have reached the end. If you are still here with us, thank you for spending the time with us. We appreciate you. Hopefully, we'll see you next month and have a great month in between.\u003C/p>\u003Cp>Bye everyone.\u003C/p>","Hello, everyone. Happy April. I'm Beth, and I'm gonna be taking you through the change log. I hope you're all having a great start to the month. If you are new here or you've been here before, welcome. Welcome. Thank you so much for spending your time with us. About what we've got going on. If you've got any questions, do let us know in chat if you're live or in Discord later. And with that, I'm gonna send you over to Carmen with the product updates for the month. Thank you, Beth. And hey, everyone. Carmen here to tell you about what we've shipped in Directus in the last month or so with 11.6 o and eleven point six point one. And not only have we added numerous small improvements and bug fixes, we've got two highlights that I'd love to draw to your attention today. So first, I wanted to bring your attention to a potential breaking change. In the latest version of Directus, we've introduced a fix for flows. This is going to affect how action hooks pass on final payloads. Now, in the past, there was a bug that original payloads would be provided in the action hook. However, moving forward, this behavior has been rectified so that the final payload, that is after the filter hook and preset changes, is now passed down to the action hook. Next, and something we feel is quite exciting, is we've added the visual editor module beta. Florian is going to join the change log later on to tell you more about that. Next, let's hear about extensions from Mike. Hi. I'm Mike, and I'm here to talk you through the extensions for this changelog. These are from the Director's Labs. Director's Labs is a GitHub org where we publish new extensions with additional functionality or experiments for you to try in your projects. This extension is the Elasticsearch operation. As you can see here, we have a create and delete flow. We also have an elastic instance with no indices currently. So firstly, in the create flow, we have an action which is on every create items in the collection posts, then it's gonna forward to our Elasticsearch operation. Here, you'll notice we've configured the remote Elasticsearch instance with the API key. I will be deleting those afterwards just in case. You can also define the collection dynamically, so the index created within Elasticsearch will be dynamically created. So each collection can have its own. You can have them prefix, suffix, or you can have a shared index for multiple collections. In this instance, we haven't we're using the create action so that it's going to add additional documents to the index with our key and the constructed data we wanna send over. This allows us to define what information we do or do not want to share from any given item to the index. So just to test, we are going to go and add another document. So here we're gonna go, hello world new search in Elasticsearch. What is Elasticsearch and what's the data sent? I'm gonna just put it as published because I can. And again adding a image from our library. Let's pick the Fusion Lead Director's logo actually, and save. So we have now saved our item. We're gonna go over to our index, our post index with one new document. If we go in, we can then see that we have our document with its title and its content, but because we didn't send over the hero image, it doesn't contain it. And we can also do the same with delete. So we delete the item from here. There we go. We have deleted the item, and that should delete from our index, which is brilliant. We can also update and document within the index as and when it happens. This is the Algolia operation. As you can see here, currently we have no indexes within Algolia. If we go over to our directors instance, currently looking at the flow for search indexes and we're going to be doing one for the creation of a item within the index. With this, we've got our event hook, which is an action on any time we create a update within the post collection. We could increase that to all other collections as with any other. And if we go inside of our creation, we can see we provide it with the application ID and the API key for Algolia. We can also define the index itself either dynamically as a collection. We can prefix, suffix, or have a step set index for all information being sent over to Algolia, say, as a centralized index. We also get to do an upsert as well as a patch update, delete, retrieve, and a search operation. In this case, we're going to be doing post creation rather than an upsert just for simplicity. And in this instance, we have our post collection with a title, content, and hero image, but we're only sending over the two item types. If we create a new post, so this is an item for Algolia. Algolia is very powerful for search within a site. We save this, and it should send over to Algolia. And we can now see that we have our posts index, and we sent over the information as is from our instance. This also means it's within any of the Algo linear interfaces we decide to put on the front end. Now we also have our delete flow, and within this case, we are setting the same information, but we can delete multiple items at once. So it has to be the keys rather than key as the attribute for the object ID, just how our Golia references the information. I'm going to clear changes, discard changes, go back, Delete our object. So we go over to our index, refresh it, And we should have an index, but with no records available. This is the open search operation. Much like with the other operations, this allows us to trigger a response like any other flow. So we have our event hook here where an action, a create item from the collections post, it is going to send over to OpenSearch with this host based upon the collection as the index and using the key for the item as the item ID for managing update creation reads on the open search side. So we will quickly just discard changes. Open search. Open search powers. The AWS search functionality. And we're gonna sit may as well, just for the sake of it, publish, save. And if we check open discover the dashboard for OpenSearch, even with the index post, we haven't got anything currently. Reload it, and we should have our object here with our content. OpenSearch powers the AWS search functionality of search title. I've then got a matching flow for deleting. So if we delete, it then takes the keys for all the objects that are being manipulated and sends that over as a delete type action. Evola. No more content. This is our new GitHub operation. It's designed for operating with GitHub actions and GitHub workflows. As you can see here, we have a trigger with the action for creating, updating, and I will actually open it up to see. We are multiple different types. Any form of change to items within it. We're monitoring the post collection as well as the director's collections for if we add any new collections to it. We obviously if we wanted, detect changes within those collections, we'll want to add these collections here. And the actual GitHub operation itself, we are providing it with the owner and repository, a fine grained access token from within the developer settings of the repo in GitHub. We're providing with a event type so that it's associated with a very specific workflow. As you can see on the right hand side, my workflow has the repository dispatch type, which is how it triggers from Webhooks, and a matching content build key so that when the hook is, triggered from Directus, it triggers the correct workflow. Yeah. Otherwise, it's a very simple flow for me just to show it off. And if we save this actually, we don't need to save because it's already saved. Clear changes. If we go back to our page and we and we see here, I have plenty of them running from just me testing. But if I create a new one, a new page, and we do, does this trigger GitHub actions, and we save it, we should momentarily get a new GitHub action, which will start. So I'm just gonna refresh to see it. There we go. Here is our latest one. It is queued up, and it's running the build state. We're laid off. This one doesn't work because I'm running a very outdated version of Next. Js on this project, but we have triggered the correct response. Thanks very much for checking out these extensions. If you have any other questions about these extensions that we've shipped, extensions in general, or how to build them, or if you're having problems with, anything you're trying to build yourself, please feel free to come to the Discord and you can find help in the extensions channel. Let's talk about content. Now in the last month, we've introduced eight new tutorials for working with Directus using different web frameworks. You'll be able to find our tutorials on building dynamic forms and building real time chat applications using Directus in combination with Astro, Next. Js, Nuxt, and SvelteKit. We're always adding more tutorials, so keep an eye out. Amazing. And I've put the link to each of the extensions mentioned in the directors TV live chat. They're also, once again, just in case you missed it, in the DirectorsLabsorg in the extensions repo on GitHub. So amazing. Thank you so much to Carmen and Mike for taking us through those updates. As Carmen mentioned, next up, we have Florian going more into detail about the very exciting visual editor. Hey, everyone. I'm Florian, a front end engineer at Directus. I'm here to talk to you about the visual editor which came out in beta with the 11 dot six dot zero release. This new module allows you to visually edit the content of your website directly in place. Now you can edit without ever leaving the visual of what you're working on. You can work right in it. Here's a demo as I talk you through the details. Once the visual editor is enabled and a URL is provided, it will appear in the module bar. The visual editor behaves similarly to live preview in that it renders content in an iframe, but with a few important differences. Users can navigate through the website freely and edit any linked element on a page without navigating to the applicable collection. Clicking an edit button next to an editable element opens an editor in either a drawer, a modal, or a popover. This editing mode as well as the number and the selection of fields that appear in such an editor can be set using the vision editing library, which web developers need to implement in their website. The library sets up the connection between your website and your director's instance. The studio module is then used to render your website within director studio, make changes in place, and then render those changes as they are made. This is Visual Editor, and it's just the beginning. We have big plans for it. If you'd like to give feedback, you can share it in the discord or the visual editing repository. Amazing. Thank you so much to Florian for taking the time to show us more around it. And it is super exciting, we've already seen some love but if you do have things as Florian said that you'd like to give feedback we're here to hear it, we are here to that's such a loop in my brain, we're here to hear it so yeah do let us know if you are intending to use it and if you've got any questions, of course. Now for this month's changelog director's TV episode, we are going into the archive with a joy of theming with Bry Ross who, I cannot stress enough, is definitely definitely not Brian in a wig. So enjoy. Hi, friends. Welcome back to the show. I'm your host, Brian Ross. And today, we're gonna take an extra special trip back to the nineties with you, our friends and friends. Alright. So we're gonna be painting a beautiful Central Perk Coffee Company theme. Alright. So let's dive into our theme. First, gonna pull up our project settings and we're going to adjust those. Just a quick little project name and description. Your friend's coffee shop. What could be more beautiful for a project descriptor? Alright. So we're gonna paste the URL in there, and we can see that project settings, our name, and descriptor up there at the top. I like to pronounce it descriptor. Makes it sound like Thor. Very powerful. But the effect that themes can have are are very powerful, especially on your users. Alright. So let's pull up our color and we're just gonna for our project color, we're gonna grab that green from the Central Perk logo. Now that's a good project color. Next, let's add a public foreground and public background. So we'll just look for Central Perk and see if we can just grab a good looking image from from all of our friends here. We're just gonna spread that across the entire background and for the public foreground, we'll just use the same logo. I think that should still look really nice on the login page, don't you? Yeah. Great. Now all these techniques that you see me using, you can use these yourself. There's nothing holding you back. You've got the tools. Just take the first step. Alright. So we're gonna paint in that first note, that public note. We've got our favicon and now we're ready to start theming. Alright, so I really like this walnut light walnut brown this almond beige color. Let's use that for our modules background so we'll just paint that in there at the top. One thing I do see though, I want I want this to match all the way up and down. So I'm just gonna paint a couple strokes there. We're just gonna look for our background color. I see that's the project color. We need to fix that, so we're going to go into our custom CSS and just add a little dot module dash bar dash logo class. Make that background transparent. Now you see it. Now you don't. Boom. Looks great. Alright, so now for our icons in that module bar. What I want to do, I don't want to be heavy handed. I'm still going to use light strokes for this, but I am going to try and pick up a, like, a darker brown. I'm almost thinking they've got one here on the website, but, I just don't see it. Alright. Let's just try a black and see how that works. So we'll just go paint in a black. It's it's too much contrast. It doesn't give me those warm feelings of a of a coffee shop that I'm looking for. So let's pull this brown from this wood image. Now one of the other tools that I use, ColorSlurp, terrible name, great product though. Being able to just copy those hex codes for for everything all you see on your screen. Great tool. Stores all those hex codes as well, and then you can quickly bang those in your keyboard. Alright. So next, what we wanna do is we want to control our list, our sidebar here. So let's add a background to this. And for this I'm going to use a little tool that I like. We're going to look for the Essential Perk couch color. Because if you remember inside this coffee shop there's a big couch that just takes up all the area. So we're going to lift this orange couch and make it our background. Is it weird? Maybe a little bit, but for you folks who didn't live through the nineties, they were a weird time as well. So let's let's lean into it and and embrace the journey, see where this theme takes us. A little unorthodox mixing colors like this, but with your tools at your side and joy in your heart, you can make any theme work. That looks good. So now we've got a nice separation there. Let's resolve the icons here. So again, having those set to the project color of green might not be the best idea. So I'm just going to take that detail brush and paint in some foreground Just a white foreground Let's go in and let's try to make this look like a cloth texture as much as we can So I'm just gonna use a little pattern monster here. We're gonna find a pattern. Just gonna keep keep looking through our patterns until we find something that we like. Just just browse those patterns. Do we find a pattern that we like? This adjoined diamond pattern reminds me of my grandmother's couch and her kitchen floor at the same time. Amazing. Alright, so let's use that same orange base color and we're just going to dial back the opacity here and then also on the other overlay, let's just switch that from white to black. And, again, we're gonna dial in that opacity. Now I think this is a subtle effect that kinda gives a texture that reminds us of the nineties, or at the very least, your grandmother's house. What wonderful memories I'm sure you have there. Alright. So we're just gonna paint the rest of that in and, okay. We'll dial back that opacity a little bit just to give this a little more subtle effect. And now I'm gonna pull out that palette knife, and we're just gonna paste this in. We're gonna pull up that CSS. We're gonna copy the URL portion so we've got our data URI. We're just going to paste that into the background and just bring that all the way down. Alright. So now we've got this orange symbolic couch in the middle of our theme. Alright. So if we go into our background, we want to add a subtle background, that stark contrast between the white and the orange. There's opportunity there. So we're just gonna dial that in a little bit. Again, we're gonna use our color mix. Just paint that in. We're going to blend that almond with 80% white and we get this soft beige. Just invites you in like a warm cup of coffee in the morning. Now the last thing that we want to do is dial in our fonts. We're just going to pull this up. We've got a custom font here that looks like a scribble. I quite like this effect. So we're just going to go in to our font face, add that there, and then we're just going to paint this on. Paint in a little font family. We're going to call it friends. We're going to call it friends. Yeah, that's nice. Alright. Use a light touch. Very important. You want to have a handy hand heavy hand in this. Alright. So then we're gonna go into our fonts under display, and we're just gonna go friends. Just gonna add friends in there. Now we can see that at the top and just adjust it a little bit. There we go. Voila. And now we have our coffee shop theme. We have our friends and the couch in the middle, and everything is right, Just like it was in the nineteen nineties. Alright. Let's take a look at our public sign in page. And voila. We have our Central Perk theme. That's it for this episode of The Joy of Theming. Thank you for joining me. It's through your support that we can continue teaching techniques to help everyone theme. Each of us has a perfect theme inside of us. It's time to let yours out. We'll see you. We want to take a moment towards the end of the changelog for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been five contributors. A huge thank you to Subtire Lou for updating utility sort type signature to allow the use of both string and number. Thank you to Collier for adding an implicit for one to many and many to any relations Thank you to Jacob for improving invalid asset transformation parameter value error handling and adding an omit key option to get config from env Thank you to Son for updating the translation key input field overflow And thank you to Dan for adding the ability to map OAuth claim groups to directors roles Thank you again and you can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of March who financially contribute to Directus's development a huge thank you to Wayfam, Entel, Mike, Fergus, Omar, Marcus a special thank you to Mission Control for coming on board as an advocate level Peter, Utomic, Steven, Robson, Nonlinear, Andreas, John, Jamaleddin, Burb, Adam, Jason, Birka, Vincent, CK, Valentino, Jens, Wayne and Yannis. Thank you again the money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the Director's ecosystem So thank you again for being part of that. Alright. I am such a fan of Bry Ross. And if you also enjoyed that as much as I did, there are lots of other episodes with different themes such as Pampers, American Express. We've got the Simpsons, Home Depot. Some say there is nothing, no theme that Bry Ross cannot do. He's a true artist. And, yes, if you haven't been checking out directorstv, directors I 0 Directors.i0/tv, do check it out. There are tons of episodes, across lots of different, topics. If you've not checked it out, there is a lot for you to catch up on so do, I recommend going and seeing it too. Thank you so much for joining us. You have reached the end. If you are still here with us, thank you for spending the time with us. We appreciate you. Hopefully, we'll see you next month and have a great month in between. Bye everyone.","d4cc3ee3-081e-4865-aee1-f130124acc8a",[329,330,331,332],"eb645c44-4d6d-41b7-8813-223e01e50cb4","b5fa8a76-5798-48b9-87d5-26d146216ce5","6594f8ea-630f-40ec-8678-00aab5c43fc7","965569fc-a343-4438-bd12-a6f3bce609a5",[],{"id":139,"number":140,"show":122,"year":141,"episodes":335},[143,144,145,146,147,148,149,150],{"id":147,"slug":337,"vimeo_id":338,"description":339,"tile":340,"length":242,"resources":8,"people":8,"episode_number":341,"published":342,"title":343,"video_transcript_html":344,"video_transcript_text":345,"content":8,"seo":346,"status":130,"episode_people":347,"recommendations":352,"season":353},"may-2025","1082491904","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights.","69658fd3-a1f8-4fc9-b9c8-37f004731e7d",10,"2025-05-14","May 2025","\u003Cp>Speaker 0: Alright. Hello, everyone. I hope you're all having a wonderful day. Welcome to the May changelog. And if you are joining us live or you're watching later on, hi.\u003C/p>\u003Cp>Hello. Thank you for joining us. I'm Beth, and I'm gonna be taking you through today's show. We have a lot of Brian today. It's very exciting.\u003C/p>\u003Cp>I, however, am gonna be kicking you off by taking you to Carmen with the product\u003C/p>\u003Cp>Speaker 1: updates. Thanks, Beth. And hey, everybody. Carmen here to tell you about what we've shipped in the last month or so with Directus eleven point seven point o through to eleven point seven point two. Now we've launched a couple of exciting new features, some bug fixes, and just one potential breaking change that you should know about.\u003C/p>\u003Cp>Now let's start with some potential breaking changes. As of Directus 11.7 o, we will no longer be supporting MySQL 5.7 in the API, so keep an eye out for that. One of the biggest improvements we've made is in the UX and UI of the visual editor module, so go check it out. Lastly, we've published the Directus schema builder package for mocking database schemas. So that's an overview of what we've been working on over the last month.\u003C/p>\u003Cp>Be sure to check out further details of the visual editor module improvements later on.\u003C/p>\u003Cp>Speaker 2: Hey. What's up? Brian here. I'm gonna tell you about some updates to, one of our more popular extensions that we've released to the Directus Labs program, the superheader. So the superheader is, basically a powerful header component that gives you a couple different pieces inside one box.\u003C/p>\u003Cp>So you get a a a title that uses dynamic values. You get a subtitle, so you can add things like published and, you know, additional metadata. You get contextual help, and you get an action bar where you can add links or you can run flows right from the form instead of opening in the right sidebar. So this has been pretty popular since we launched it, but we also got a slew of feedback from you guys. So keep the feedback coming.\u003C/p>\u003Cp>Love it. We have fixed, quite a few of the bugs that are were happening on opening different modal windows within modals. So that is resolved. And let's take a look at the new functionality. So one of the pieces that is brand new is the ability to open the help content in a modal instead of inline, as a like an accordion type experience.\u003C/p>\u003Cp>For me, I think this is a better experience, but we still support the inline help if you prefer that as well. Next, we have fixed some of the issues with, like, loading internal links. So you can see here, I can open this up in\u003C/p>\u003Cp>Speaker 3: the visual\u003C/p>\u003Cp>Speaker 2: editor. That does not have to spin up the app or open in a new window, so we've solved that. And then when opening flows or running flows, now we have the capability to, properly manage the overlay so that if you open something else inside your flow, which you can do let's take a look at this, where we wanna pick up the direct Us users. This is no longer showing behind that. So, just quality of life improvements.\u003C/p>\u003Cp>Now, onto the two biggest improvements. Right? The ability to translate the help content, which was a huge one for, anybody outside The US. And, initially, I wasn't super sure there was an easy way to get the this done, but we managed to do that. So here is how you enable translation support within the superheader.\u003C/p>\u003Cp>So we're here inside the data model. We go into our interface, and we scroll down, and now we have this enable help translations. So the help translations here, this uses the custom translation strings, and you'll have to set these up just like you would anywhere else, that you're leveraging those for fields. And what this will do, whatever you set for these translation strings will override whatever the the help content is here. So let's just take a look at what that experience looks like.\u003C/p>\u003Cp>I'm gonna go in. And if I look at my custom translations, you could see I've got two different values for this key. I've got one in English, and this is just HTML content. That still works just fine. And then I have the same thing in French.\u003C/p>\u003Cp>So now go to the home page. We could see, okay, this is English. If I go to my specific user, we just change the default language to French, and we go back. You know? So we see some of this content.\u003C/p>\u003Cp>Obviously, it doesn't have translation strings set up for it. It. But if we load our help, now we've got that help content localized for our user. So that just works out of the box with the standard setup. Now I'll go back in, just quickly set this back.\u003C/p>\u003Cp>And then the last piece of the puzzle is relational item support. So when we first launched this, we could not, fetch relationships. Now you can. So if you have, like, a site set up where I've got a site that this belongs to. We wanna show the name of the site or even inside, like, our actions where we want to leverage a, a domain from another collection or a field from a many to one relationship, we can do that now, which is great.\u003C/p>\u003Cp>I know some of you have multi tenant setups, and this enables that workflow. So now I can go in. I could see the site name. This is linked to Bryant's site if we open that up or Bryant's front end. And then if I hit view on website, that will load that link for me.\u003C/p>\u003Cp>So that is the update for the superheader. Hope you guys enjoy this. Super powerful. Got an update for you on our SEO plugin. So this was a a plug in that we launched not too long ago.\u003C/p>\u003Cp>We've added, a lot of nice updates to it. So, if you've already used it before, this should look familiar to you. The plug in is all about managing your SEO metadata in a simple, easy to use interface. So, out of the box, you kinda get page titles and meta descriptions, which is basically the the bare minimum that you want on the SEO side. We show you a a quick little search preview of what that would look like.\u003C/p>\u003Cp>You could populate this with a template from the page title, and we give you just some contextual help of, you know, how many characters you should have for the page title or the meta description. And if I go over those, you could see that that's gonna be truncated in our search preview. We've also added a preview for your social media links or OG images. So here, I can, upload my social images or my OG image and actually get a quick preview of what it's gonna look like if it's shared on different platforms, and what that link will actually look like. Just, again, helpful little context.\u003C/p>\u003Cp>But now we have added even more powerful features to this, based on feedback that we received. So, we can enable an advanced controls like search engine for, like, no index, no follow so that it doesn't follow links or this particular page doesn't get indexed. You can add site map controls if you want to change the frequency, which the crawlers look at your site, or the SEO fields. Those were, like, custom SEO fields where I can define, like, canonical URLs or basically any other metadata that I want to pass to my front end. But the new thing here is our focus key phrase.\u003C/p>\u003Cp>So we can actually analyze your content. So I'm gonna go into our pages collection, and let's set up the SEO plug in for our blog posts. So So I'm just gonna add this focus key phrase, and when I enable that, it asks me for a slug field and content fields. So where are we actually keeping the content that we're gonna render on the page? Now if you've ever u if you're coming from WordPress, this is very similar to something like Yoast or or some of those other SEO tools where the it's just static analysis of our content.\u003C/p>\u003Cp>So if I pull this up, we go over to our SEO tab, and here we've got the option to add our main key phrase. So if I add CMS as our main key phrase, you could see this analysis will happen almost immediately. It says, hey. Your focus key phrase does not appear in the content. So this keyword isn't showing up in my content.\u003C/p>\u003Cp>You know, maybe bunny would be a better one for this. Cool. And then it shows us, hey. Your subheadings, like your h ones, h twos, h threes, those do not contain that focus key phrase. So it gives us improvements, good results.\u003C/p>\u003Cp>Just a quick, nice little check on your content before you publish to know that you're covering your SEO basics. So that is the update for the SEO plugin. I I hope you'll find this helpful. Keep the feedback coming, please. We love it.\u003C/p>\u003Cp>Speaker 1: So what's new in content this month? We've been hard at work and published eight new articles all about CMSs or content management systems. Be sure to check them out. We've got articles on how to create a CMS and how to generate dynamic pages for CMSs in Astro, Nuxt, Next. Js, and SvelteKit.\u003C/p>\u003Cp>Don't miss them.\u003C/p>\u003Cp>Speaker 0: Alright. And as a reminder, you can find the extensions in github.com/directors-labs/extensions and also the tutorials on directors.i0/docs/tutorials. Next up, we have more of Brian. I told you we were super lucky today. He is gonna be talking us through the visual editor updates.\u003C/p>\u003Cp>Speaker 2: Super excited for this one. This is a huge feature release for us. Visual editing. It's here. It's real.\u003C/p>\u003Cp>It's freaking awesome. And, yeah, I don't get excite well, I get very excited about a lot of things, but I'm super excited about this one, and you should be too. This is gonna change the game. Right? The problem with most headless CMS experiences, great for us as developers, we love the structured data.\u003C/p>\u003Cp>Structured data is great for LLMs and AI. But, when you go headless, you kinda miss that that standard see what I'm editing experience. Right? You're relying on the front end to interpret a lot of that. So in the past, we've had live preview.\u003C/p>\u003Cp>That works great. But what if we take this a step further and I just allow my content editors not to have to do this in a form, but as they're browsing the page and they could see the edits they're making right in line. That is visual editing. It's here. Let's take a look at it.\u003C/p>\u003Cp>So I'm just gonna open this page up. This is our super header extension, but I'm just gonna open this page in our visual editor. So here I could see, we've got our content, and you'll notice as I start mousing over things, because I've enabled visual editor and it's, visual editor is two pieces. Right? There's a module inside Directus, and then there's a front end library that you install on your website.\u003C/p>\u003Cp>Works with any of your favorite frameworks. So Nuxt, Next, Astro, Svelte. We've actually got starter kits for you. % ready to go with this integrated, so you don't really have to do a lot of work to get started with this, but super powerful. Right up here at the top, we'll see our different URLs that are available to navigate to.\u003C/p>\u003Cp>I can also do this where I just toggle the navigation and hide that. And basically from here, it is like a full on browsing experience. I can jump between different pages and I can hover over an element, go in and edit that. Edit this form. Great.\u003C/p>\u003Cp>All the keyboard shortcuts that you would expect are here. So I can hit command save to save that if I'm opening this up. I can hit escape to close. So it's a very nice experience. Up at the top, I can also toggle all the editable elements.\u003C/p>\u003Cp>So I can see everything that I can edit in one one go. Super easy. Right? I can go in and update all of my navigation items. I could add new items to my navigation.\u003C/p>\u003Cp>And, basically, this is, all just using the data model that you've got set up in Directus. On the front end, you're enabling these fields and the behavior that you want through data attributes. Couldn't be simpler to integrate, works with any deployment target, whether that's Netlify or Vercel, just a regular node, long running server. Whatever you've got, you can make this work. And this is baked into core as well, which, you know, it's not hidden behind some enterprise plan, which is huge.\u003C/p>\u003Cp>So I'll I'll just go in and let's navigate to our page at the bottom here. This is integrated into our front end where you can see I can now just drag and drop these blocks. And instead of doing this in a form and hitting save and waiting for the changes to happen, now I can see this happen directly in line. So this is content editing, and this is freaking awesome. So number one, your content editors are going to love this.\u003C/p>\u003Cp>You know, definitely check this out. I'm gonna show you inside our docs where this is located. First and foremost, like I said, we've got starters ready to go for you. There's a command that you can just copy here, n p x directus dash template dash cli at latest init. Copy this.\u003C/p>\u003Cp>Run this. It will pull down a example of our CMS template that you see here, and then it will also prompt you to install your favorite front end framework, which, again, we've got it all set up. But if you go to our docs, go to the guide section, and under content, look for the visual editor. So this is a a quick preview of what it looks like. We've got documentation on the front end library.\u003C/p>\u003Cp>Again, that works through data attributes. You just install this, do a little bit of config, and boom. Your content editors will love you. They'll be 10 times more efficient, 10 times more productive, and I this is just an amazing feature all around. I I'm super excited about it.\u003C/p>\u003Cp>I hope you are too.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you for those updates, Brian. If you are regular here at the changelog, first of all, thank you. You are my favorite people. And secondly, you will know that the community showcase is my all time favorite part of this show, and we are back, and I'm so excited for it.\u003C/p>\u003Cp>So we have Jochem talking through his currency extension next.\u003C/p>\u003Cp>Speaker 4: Hello, everybody. My name is Jochem Gourdes, and I'm a software developer from The Netherlands. In my day to day job, I have a lot of focus on building software for the app, mainly in the front end space. My go to back end to use with my front end applications and the one that I really enjoy using is Directus. And one of the things I really like about Directus is the extensibility via custom extensions.\u003C/p>\u003Cp>And that's also the topic of my video today. I recently built and released an extension called simple currency fields. The main goal of this extension is to provide a custom editor interface and an inline display for the Data Studio to enter and view currency values the same convenient way as we're used to in the Director Studio. And why currency values? Well, for example, to store prices for products in an ecommerce store.\u003C/p>\u003Cp>The reason I wanted to build this extension was because the default input field field for the decimal type didn't give me enough flexibility for safely handling user inputs and correctly displaying a currency value. And as a technical side note, I did want to extend upon the decimal type for the fields because of its accuracy in the database. So the extension will actually only work with fields that have decimal as their type. I've prepared a tiny demo within a local direct instance on my computer and they'll be using a custom product collection I've prepared. So let's have a look.\u003C/p>\u003Cp>So let's have a look at our product collection. As you can see, we have a couple of pretty common, fields, status, image, name, and price fields. Interface size, also price, and a couple of other fields fields which are not important for this demo. For the inputs, for the interface side, we have a euro symbol. And for our display portion, we also have a euro symbol.\u003C/p>\u003Cp>And if we are going to our product data model, we can see that price field is configured as a decimal field with precision 19 and scale of two, which means we can store pretty big, numbers in our database for these fields. And in the interface tab, you can see how I configured the euro sign as icons for the in for the interface and euro sign as prefix that's being used by the display. I've also enabled auto formatting for this field, and I think this is a pretty common way how you normally would configure currency fields in directors. So what I want to do next is change my system settings, my language settings to Dutch. Let's do that.\u003C/p>\u003Cp>And let's go back to our product collection. And one of the problems I was talking about should become visible now because the way the price is presented here is not common for, the Dutch language. For instance, it should be using a comma as a decimal separator, but instead it's still showing a dot for it. If we now go into one of the products and edit it as we and edit it, we can see the dot here as well. Important to note here though is that users should also use a document changing the value here.\u003C/p>\u003Cp>And this is probably not convenient for a lot of users and maybe even worse if I copy a valid ditch price into the fields, that will just change it into a comma here, we will get a very crisp and clear error message. At least I hope so. Well, not really. Most technical users would be able to figure out what's going on here, but most probably would not. So these are a couple of the things I want to solve with the extension.\u003C/p>\u003Cp>A simple way to input and view currency values preferably in the local of the user handling the content. So let's solve that. For this, we can go to our extensions and we can see that we have no extensions installed yet. And if you go to the marketplace, we can search for the simple fields, simple currency field, extension. We can install it.\u003C/p>\u003Cp>We have to reload the page and then we can go back to our collection to the price fields. And let's start with the display, now with the interface. And let's change the input to currency. And let's configure our currency to euro. Save it.\u003C/p>\u003Cp>And if we go back to our product listing and to a product, we can now see properly formatted currency value. In fact, I can type whatever I want Unless it's a number, it will not accept it as input. What's also need to show here is that as soon as you leave the field, the field will automatically be formatted into the correct logo for the user. So it also supports rounding. So if I add a six, it should be become 96, and that will also work.\u003C/p>\u003Cp>But you can also add in bigger numbers to get a thousand separator like this. And if you leave the field, it will automatically, probably format it. If you save it to the same thing and you can also, copy in numbers with a thousand separator in it. Like this, for instance, as an example. If I copy that into the fields, it will automatically use the proper inputting format.\u003C/p>\u003Cp>And as soon as I leave it, it will use the proper display formatting. And yeah. Let's also enable it for the display. So if you go back to our collection, go to the display settings, remove the configured version and pick currency. Save that.\u003C/p>\u003Cp>The currency symbol is automatically derived from the interface settings. Let's go back to our collection and we can see it's properly formatting here as well. One last thing to show here, I think, is that, instead of changing, current fields, you can also easily add new currency fields to any of your collections. For instance, let's imagine we need a subtotal field in our product collection. We can easily do so by selecting the currency, field here, which is just a placeholder for the input field with types at two decimal.\u003C/p>\u003Cp>Let's name that subtotal. Let's also give that the same, currency symbol. And let's go to the advanced, options in order to set precision and scale to be the same as the price field. Save it. Move it and let's go back to our collection.\u003C/p>\u003Cp>And here you can see now that we can use the field with the with the extension. So that was my demo. With this extension, I hope to make handling currency values in Directus not only easier, but also more intuitive and user friendly, especially for those working in different logos. If you would like to try this extension yourself, you can find it on the Directus marketplace and on my GitHub profile. You can also find me on Directus Discord server if you want to chat.\u003C/p>\u003Cp>And if you have any feedback, suggestions, or ideas for improvements, feel free to reach out. I'm always open for to suggestions and collaboration. Thank you for watching this demo, and I look forward to see how the community makes use of the simple currency field extension. Have a great day. Bye.\u003C/p>\u003Cp>Speaker 0: Alright. And there's actually since Yohum very kindly, recorded that video, there is a new post on our new community platform, which I will link here as well. And that brings us to our next section, which is that Ryke and I had a little chat about just that. Welcome. We have Raik with us who is do you want to introduce yourself in case people don't know?\u003C/p>\u003Cp>Maybe they're finding this on a different platform.\u003C/p>\u003Cp>Speaker 3: Yes, please. I'm the CTO and cofounder\u003C/p>\u003Cp>Speaker 0: And you're here with exciting news, which you may have already heard if you are in our Discord. But what is the exciting news, Royce?\u003C/p>\u003Cp>Speaker 3: We have a new community platform that is very exciting news.\u003C/p>\u003Cp>Speaker 0: What is the new platform? Where is it?\u003C/p>\u003Cp>Speaker 3: New platform is community.directors.ao, and it's a discourse forum.\u003C/p>\u003Cp>Speaker 0: Are we about to battle it out between Discord and discourse right now?\u003C/p>\u003Cp>Speaker 3: I think we should. Shouldn't we?\u003C/p>\u003Cp>Speaker 0: I think we should. I think we should. So we're moving from Discord to Discourse. Why? Why are we why are we doing that?\u003C/p>\u003Cp>Speaker 3: Right. So we've been on Discord for, gosh, years now. Right? We started it as an open community server, and it kinda turned into a bit of a, you know, q and a type of thing, a chat with contributors. But over time, we realized as that community grew, we just hit a couple of roadblocks, really.\u003C/p>\u003Cp>It's like the search kinda didn't work, so people have they have to ask the same question multiple times. You know, the the questions don't show up on the Internet. So if you Google for stuff, you're not gonna find any of the questions that were asked on Discord. And generally speaking, you know, it it started to you know, there's some cracks showed up. There were some cracks at that skill for sure.\u003C/p>\u003Cp>So the the main points that we realized we wanted to solve is a, just that findability. Right? Make it accessible, make it accessible to the Internet, make it accessible and therefore and then and then the second part is make sure that it's in a in a structured format that is a little bit of QA rather than just check messages that are all, you know, intertwined like that. So, yeah, we we chose Discourse as sort of the tool for the job, and that's now accessible.\u003C/p>\u003Cp>Speaker 0: Yes. It is. So you can view it without a, an account or you can make an account and you can start posting and liking things. What's happening to the current Discord? Was is it completely going?\u003C/p>\u003Cp>Are we are we shutting it down? Oh, no.\u003C/p>\u003Cp>Speaker 3: No. No. No. No. No.\u003C/p>\u003Cp>So what Discord is really good for is active chatting, obviously. I mean, it's a chat platform. Right? So we're gonna keep it around for chatting with the community and just talking to each other, talking with contributors, talking to, you know, folks in the community in general. But we are explicitly saying, hey.\u003C/p>\u003Cp>Discourse is just the better tool for the job when it comes to q and a. So if you have any questions around Directus or how to use it or you're running into something, Discourse is gonna be the place to go. Right? Community.directus.ao. And for everything else, if you just, you know, wanna chat, wanna hang out, Discord is gonna stick around.\u003C/p>\u003Cp>Speaker 0: I'm gonna give you a very quick tour of the new community platform. If you head over to community.directors.io, you'll land here, which has all of the top posts. You can also filter from all time, year, quarter, month, week or on today. There's also the ability to see the latest activity on posts. You can also filter with tags or in categories.\u003C/p>\u003Cp>So for example, if you want to see the showcases, here you go. You have the ability to sign up with your Google, your GitHub, your Discord or your email address. Once you've signed in 'here I am is definitely not Beth' you'll be able to post topics, so you can pick whichever category is the right one for your post and any tags that relate to it as well as a title and a body of text. You can also interact with other people's posts by liking, you've got a few choice of different emojis, as well as replying. If you've got any questions about the new platform or what's happening with Discord or anything else, let us know.\u003C/p>\u003Cp>The general chat in Discord is still available or make a new topic on our community platform.\u003C/p>\u003Cp>Speaker 2: Welcome back to another episode of Short Hops. I'm your host Brian Gillespie. And in this episode, I'm gonna give you one of the coolest tips and tricks that I've probably ever shared here on Short Hops. So stick with me on this one. It's really cool.\u003C/p>\u003Cp>Alright. So what are we focused on today? We're gonna build a better user experience using filters on our relational interfaces. That is a mouthful, kind of underwhelming title. But let's dive into an example project and I'll show you what we've got going on.\u003C/p>\u003Cp>So this is a sample Directus instance. This is my agency OS project that we put out under the Directus Labs organization. Be sure to check that out. But I wanna show you the scenario. So I'm creating a project in here and we've got an organization and we could add multiple contacts to this.\u003C/p>\u003Cp>So a a project belongs to an organization. Let's go with Tesla, in this case, pretty ambiguous name. And then I want to add an existing contact to this. But you could see here here's my problem. If I take a look, I get all the contacts for this.\u003C/p>\u003Cp>So, you know, I'm only wanting to be able to select contacts that are at Tesla. So this is kind of a a dependency here. How do we manage something like this? So I'm just gonna open the settings. We're gonna go into our data model.\u003C/p>\u003Cp>I'm gonna look for the projects collection. And here inside organization, we've got contacts right beside it. What I'm looking for, you know, we could see the relationship tab and how all these things come together. But when I go into the interface, and this is a mini to mini collection or relationship, so you'll have to be mindful of how you've got your relationship set up. But if I want to set that up dependent upon a field that we already have, I could do something like this.\u003C/p>\u003Cp>Down here in my filter, you know, I could go in and and like hard code a value of, you know, show me all the contacts where the name contains Ashley. But we want this to be dynamic, right? So I'm gonna drill into our organizations. This is a many to many relationship. And I'm gonna say organizations dot ID equals, and I could do this.\u003C/p>\u003Cp>So I'm gonna do mustache brackets here, hold on, and And I'm gonna do organization, which is the name of that other field inside our data model. Alright. Great. So let's take a look at this and we'll go back. We'll create a new project.\u003C/p>\u003Cp>Right now if I click add existing, no contact show up. How come? Right? So what I could do here, we'll say direct us test. That's the company we wanna do this project for.\u003C/p>\u003Cp>And now I only see the contacts who are part of that organization. Right? Likewise, if I change this to Tesla, I open it up and I see I've got Elon Musk here as the only option to select. So that's it. Take a look at the filter on any of the relational interfaces that you've set up.\u003C/p>\u003Cp>This is a a nice little technique to use in certain scenarios like this one. That's it for this episode. Stay tuned for the next one.\u003C/p>\u003Cp>Speaker 0: We want to take a moment towards the end of the change log for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been three contributors. A huge thank you to Osman for fixing duplicate values for is one off filter, Gevelium for ensuring that the context menu of a field in the data model settings appear at full height, and to Ziles for adding data collection and field name attributes to parent wrapper for all form elements. Thank you again. You can see their specific pull requests inside of the full release notes on GitHub.\u003C/p>\u003Cp>Lastly, we also want to take the time to thank our GitHub Sponsors of April who financially contribute to their Exodus development. A huge thank you to Weifan, Entel, Mike, Fergus, Omar, Marcus, Mission Control, Peter, Utomic, Steven, James, Nonlinear, Andreas, Khan, John, Jamiluddin, Burb, Adam, Jason, Birka, Yuya, Vincent, CK, Valentino, Jens, Wayne, and Yannis. The money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright.\u003C/p>\u003Cp>That is everything for this month's changelog. Thank you so much. If you've made it to this point, you are incredible, and I appreciate you spending the time with us. I hope to see you next month. In the meantime, do go check out the new community platform.\u003C/p>\u003Cp>And if you've got any questions, you've got two choices now. You can either go into the Discord or you can be top tier and go to our new community platform. So please go see you over there and let go and check out more of what's been going on. Have a great rest of your day, your week, and your month, everyone, and I will see you again shortly.\u003C/p>","Alright. Hello, everyone. I hope you're all having a wonderful day. Welcome to the May changelog. And if you are joining us live or you're watching later on, hi. Hello. Thank you for joining us. I'm Beth, and I'm gonna be taking you through today's show. We have a lot of Brian today. It's very exciting. I, however, am gonna be kicking you off by taking you to Carmen with the product updates. Thanks, Beth. And hey, everybody. Carmen here to tell you about what we've shipped in the last month or so with Directus eleven point seven point o through to eleven point seven point two. Now we've launched a couple of exciting new features, some bug fixes, and just one potential breaking change that you should know about. Now let's start with some potential breaking changes. As of Directus 11.7 o, we will no longer be supporting MySQL 5.7 in the API, so keep an eye out for that. One of the biggest improvements we've made is in the UX and UI of the visual editor module, so go check it out. Lastly, we've published the Directus schema builder package for mocking database schemas. So that's an overview of what we've been working on over the last month. Be sure to check out further details of the visual editor module improvements later on. Hey. What's up? Brian here. I'm gonna tell you about some updates to, one of our more popular extensions that we've released to the Directus Labs program, the superheader. So the superheader is, basically a powerful header component that gives you a couple different pieces inside one box. So you get a a a title that uses dynamic values. You get a subtitle, so you can add things like published and, you know, additional metadata. You get contextual help, and you get an action bar where you can add links or you can run flows right from the form instead of opening in the right sidebar. So this has been pretty popular since we launched it, but we also got a slew of feedback from you guys. So keep the feedback coming. Love it. We have fixed, quite a few of the bugs that are were happening on opening different modal windows within modals. So that is resolved. And let's take a look at the new functionality. So one of the pieces that is brand new is the ability to open the help content in a modal instead of inline, as a like an accordion type experience. For me, I think this is a better experience, but we still support the inline help if you prefer that as well. Next, we have fixed some of the issues with, like, loading internal links. So you can see here, I can open this up in the visual editor. That does not have to spin up the app or open in a new window, so we've solved that. And then when opening flows or running flows, now we have the capability to, properly manage the overlay so that if you open something else inside your flow, which you can do let's take a look at this, where we wanna pick up the direct Us users. This is no longer showing behind that. So, just quality of life improvements. Now, onto the two biggest improvements. Right? The ability to translate the help content, which was a huge one for, anybody outside The US. And, initially, I wasn't super sure there was an easy way to get the this done, but we managed to do that. So here is how you enable translation support within the superheader. So we're here inside the data model. We go into our interface, and we scroll down, and now we have this enable help translations. So the help translations here, this uses the custom translation strings, and you'll have to set these up just like you would anywhere else, that you're leveraging those for fields. And what this will do, whatever you set for these translation strings will override whatever the the help content is here. So let's just take a look at what that experience looks like. I'm gonna go in. And if I look at my custom translations, you could see I've got two different values for this key. I've got one in English, and this is just HTML content. That still works just fine. And then I have the same thing in French. So now go to the home page. We could see, okay, this is English. If I go to my specific user, we just change the default language to French, and we go back. You know? So we see some of this content. Obviously, it doesn't have translation strings set up for it. It. But if we load our help, now we've got that help content localized for our user. So that just works out of the box with the standard setup. Now I'll go back in, just quickly set this back. And then the last piece of the puzzle is relational item support. So when we first launched this, we could not, fetch relationships. Now you can. So if you have, like, a site set up where I've got a site that this belongs to. We wanna show the name of the site or even inside, like, our actions where we want to leverage a, a domain from another collection or a field from a many to one relationship, we can do that now, which is great. I know some of you have multi tenant setups, and this enables that workflow. So now I can go in. I could see the site name. This is linked to Bryant's site if we open that up or Bryant's front end. And then if I hit view on website, that will load that link for me. So that is the update for the superheader. Hope you guys enjoy this. Super powerful. Got an update for you on our SEO plugin. So this was a a plug in that we launched not too long ago. We've added, a lot of nice updates to it. So, if you've already used it before, this should look familiar to you. The plug in is all about managing your SEO metadata in a simple, easy to use interface. So, out of the box, you kinda get page titles and meta descriptions, which is basically the the bare minimum that you want on the SEO side. We show you a a quick little search preview of what that would look like. You could populate this with a template from the page title, and we give you just some contextual help of, you know, how many characters you should have for the page title or the meta description. And if I go over those, you could see that that's gonna be truncated in our search preview. We've also added a preview for your social media links or OG images. So here, I can, upload my social images or my OG image and actually get a quick preview of what it's gonna look like if it's shared on different platforms, and what that link will actually look like. Just, again, helpful little context. But now we have added even more powerful features to this, based on feedback that we received. So, we can enable an advanced controls like search engine for, like, no index, no follow so that it doesn't follow links or this particular page doesn't get indexed. You can add site map controls if you want to change the frequency, which the crawlers look at your site, or the SEO fields. Those were, like, custom SEO fields where I can define, like, canonical URLs or basically any other metadata that I want to pass to my front end. But the new thing here is our focus key phrase. So we can actually analyze your content. So I'm gonna go into our pages collection, and let's set up the SEO plug in for our blog posts. So So I'm just gonna add this focus key phrase, and when I enable that, it asks me for a slug field and content fields. So where are we actually keeping the content that we're gonna render on the page? Now if you've ever u if you're coming from WordPress, this is very similar to something like Yoast or or some of those other SEO tools where the it's just static analysis of our content. So if I pull this up, we go over to our SEO tab, and here we've got the option to add our main key phrase. So if I add CMS as our main key phrase, you could see this analysis will happen almost immediately. It says, hey. Your focus key phrase does not appear in the content. So this keyword isn't showing up in my content. You know, maybe bunny would be a better one for this. Cool. And then it shows us, hey. Your subheadings, like your h ones, h twos, h threes, those do not contain that focus key phrase. So it gives us improvements, good results. Just a quick, nice little check on your content before you publish to know that you're covering your SEO basics. So that is the update for the SEO plugin. I I hope you'll find this helpful. Keep the feedback coming, please. We love it. So what's new in content this month? We've been hard at work and published eight new articles all about CMSs or content management systems. Be sure to check them out. We've got articles on how to create a CMS and how to generate dynamic pages for CMSs in Astro, Nuxt, Next. Js, and SvelteKit. Don't miss them. Alright. And as a reminder, you can find the extensions in github.com/directors-labs/extensions and also the tutorials on directors.i0/docs/tutorials. Next up, we have more of Brian. I told you we were super lucky today. He is gonna be talking us through the visual editor updates. Super excited for this one. This is a huge feature release for us. Visual editing. It's here. It's real. It's freaking awesome. And, yeah, I don't get excite well, I get very excited about a lot of things, but I'm super excited about this one, and you should be too. This is gonna change the game. Right? The problem with most headless CMS experiences, great for us as developers, we love the structured data. Structured data is great for LLMs and AI. But, when you go headless, you kinda miss that that standard see what I'm editing experience. Right? You're relying on the front end to interpret a lot of that. So in the past, we've had live preview. That works great. But what if we take this a step further and I just allow my content editors not to have to do this in a form, but as they're browsing the page and they could see the edits they're making right in line. That is visual editing. It's here. Let's take a look at it. So I'm just gonna open this page up. This is our super header extension, but I'm just gonna open this page in our visual editor. So here I could see, we've got our content, and you'll notice as I start mousing over things, because I've enabled visual editor and it's, visual editor is two pieces. Right? There's a module inside Directus, and then there's a front end library that you install on your website. Works with any of your favorite frameworks. So Nuxt, Next, Astro, Svelte. We've actually got starter kits for you. % ready to go with this integrated, so you don't really have to do a lot of work to get started with this, but super powerful. Right up here at the top, we'll see our different URLs that are available to navigate to. I can also do this where I just toggle the navigation and hide that. And basically from here, it is like a full on browsing experience. I can jump between different pages and I can hover over an element, go in and edit that. Edit this form. Great. All the keyboard shortcuts that you would expect are here. So I can hit command save to save that if I'm opening this up. I can hit escape to close. So it's a very nice experience. Up at the top, I can also toggle all the editable elements. So I can see everything that I can edit in one one go. Super easy. Right? I can go in and update all of my navigation items. I could add new items to my navigation. And, basically, this is, all just using the data model that you've got set up in Directus. On the front end, you're enabling these fields and the behavior that you want through data attributes. Couldn't be simpler to integrate, works with any deployment target, whether that's Netlify or Vercel, just a regular node, long running server. Whatever you've got, you can make this work. And this is baked into core as well, which, you know, it's not hidden behind some enterprise plan, which is huge. So I'll I'll just go in and let's navigate to our page at the bottom here. This is integrated into our front end where you can see I can now just drag and drop these blocks. And instead of doing this in a form and hitting save and waiting for the changes to happen, now I can see this happen directly in line. So this is content editing, and this is freaking awesome. So number one, your content editors are going to love this. You know, definitely check this out. I'm gonna show you inside our docs where this is located. First and foremost, like I said, we've got starters ready to go for you. There's a command that you can just copy here, n p x directus dash template dash cli at latest init. Copy this. Run this. It will pull down a example of our CMS template that you see here, and then it will also prompt you to install your favorite front end framework, which, again, we've got it all set up. But if you go to our docs, go to the guide section, and under content, look for the visual editor. So this is a a quick preview of what it looks like. We've got documentation on the front end library. Again, that works through data attributes. You just install this, do a little bit of config, and boom. Your content editors will love you. They'll be 10 times more efficient, 10 times more productive, and I this is just an amazing feature all around. I I'm super excited about it. I hope you are too. Alright. Thank you for those updates, Brian. If you are regular here at the changelog, first of all, thank you. You are my favorite people. And secondly, you will know that the community showcase is my all time favorite part of this show, and we are back, and I'm so excited for it. So we have Jochem talking through his currency extension next. Hello, everybody. My name is Jochem Gourdes, and I'm a software developer from The Netherlands. In my day to day job, I have a lot of focus on building software for the app, mainly in the front end space. My go to back end to use with my front end applications and the one that I really enjoy using is Directus. And one of the things I really like about Directus is the extensibility via custom extensions. And that's also the topic of my video today. I recently built and released an extension called simple currency fields. The main goal of this extension is to provide a custom editor interface and an inline display for the Data Studio to enter and view currency values the same convenient way as we're used to in the Director Studio. And why currency values? Well, for example, to store prices for products in an ecommerce store. The reason I wanted to build this extension was because the default input field field for the decimal type didn't give me enough flexibility for safely handling user inputs and correctly displaying a currency value. And as a technical side note, I did want to extend upon the decimal type for the fields because of its accuracy in the database. So the extension will actually only work with fields that have decimal as their type. I've prepared a tiny demo within a local direct instance on my computer and they'll be using a custom product collection I've prepared. So let's have a look. So let's have a look at our product collection. As you can see, we have a couple of pretty common, fields, status, image, name, and price fields. Interface size, also price, and a couple of other fields fields which are not important for this demo. For the inputs, for the interface side, we have a euro symbol. And for our display portion, we also have a euro symbol. And if we are going to our product data model, we can see that price field is configured as a decimal field with precision 19 and scale of two, which means we can store pretty big, numbers in our database for these fields. And in the interface tab, you can see how I configured the euro sign as icons for the in for the interface and euro sign as prefix that's being used by the display. I've also enabled auto formatting for this field, and I think this is a pretty common way how you normally would configure currency fields in directors. So what I want to do next is change my system settings, my language settings to Dutch. Let's do that. And let's go back to our product collection. And one of the problems I was talking about should become visible now because the way the price is presented here is not common for, the Dutch language. For instance, it should be using a comma as a decimal separator, but instead it's still showing a dot for it. If we now go into one of the products and edit it as we and edit it, we can see the dot here as well. Important to note here though is that users should also use a document changing the value here. And this is probably not convenient for a lot of users and maybe even worse if I copy a valid ditch price into the fields, that will just change it into a comma here, we will get a very crisp and clear error message. At least I hope so. Well, not really. Most technical users would be able to figure out what's going on here, but most probably would not. So these are a couple of the things I want to solve with the extension. A simple way to input and view currency values preferably in the local of the user handling the content. So let's solve that. For this, we can go to our extensions and we can see that we have no extensions installed yet. And if you go to the marketplace, we can search for the simple fields, simple currency field, extension. We can install it. We have to reload the page and then we can go back to our collection to the price fields. And let's start with the display, now with the interface. And let's change the input to currency. And let's configure our currency to euro. Save it. And if we go back to our product listing and to a product, we can now see properly formatted currency value. In fact, I can type whatever I want Unless it's a number, it will not accept it as input. What's also need to show here is that as soon as you leave the field, the field will automatically be formatted into the correct logo for the user. So it also supports rounding. So if I add a six, it should be become 96, and that will also work. But you can also add in bigger numbers to get a thousand separator like this. And if you leave the field, it will automatically, probably format it. If you save it to the same thing and you can also, copy in numbers with a thousand separator in it. Like this, for instance, as an example. If I copy that into the fields, it will automatically use the proper inputting format. And as soon as I leave it, it will use the proper display formatting. And yeah. Let's also enable it for the display. So if you go back to our collection, go to the display settings, remove the configured version and pick currency. Save that. The currency symbol is automatically derived from the interface settings. Let's go back to our collection and we can see it's properly formatting here as well. One last thing to show here, I think, is that, instead of changing, current fields, you can also easily add new currency fields to any of your collections. For instance, let's imagine we need a subtotal field in our product collection. We can easily do so by selecting the currency, field here, which is just a placeholder for the input field with types at two decimal. Let's name that subtotal. Let's also give that the same, currency symbol. And let's go to the advanced, options in order to set precision and scale to be the same as the price field. Save it. Move it and let's go back to our collection. And here you can see now that we can use the field with the with the extension. So that was my demo. With this extension, I hope to make handling currency values in Directus not only easier, but also more intuitive and user friendly, especially for those working in different logos. If you would like to try this extension yourself, you can find it on the Directus marketplace and on my GitHub profile. You can also find me on Directus Discord server if you want to chat. And if you have any feedback, suggestions, or ideas for improvements, feel free to reach out. I'm always open for to suggestions and collaboration. Thank you for watching this demo, and I look forward to see how the community makes use of the simple currency field extension. Have a great day. Bye. Alright. And there's actually since Yohum very kindly, recorded that video, there is a new post on our new community platform, which I will link here as well. And that brings us to our next section, which is that Ryke and I had a little chat about just that. Welcome. We have Raik with us who is do you want to introduce yourself in case people don't know? Maybe they're finding this on a different platform. Yes, please. I'm the CTO and cofounder And you're here with exciting news, which you may have already heard if you are in our Discord. But what is the exciting news, Royce? We have a new community platform that is very exciting news. What is the new platform? Where is it? New platform is community.directors.ao, and it's a discourse forum. Are we about to battle it out between Discord and discourse right now? I think we should. Shouldn't we? I think we should. I think we should. So we're moving from Discord to Discourse. Why? Why are we why are we doing that? Right. So we've been on Discord for, gosh, years now. Right? We started it as an open community server, and it kinda turned into a bit of a, you know, q and a type of thing, a chat with contributors. But over time, we realized as that community grew, we just hit a couple of roadblocks, really. It's like the search kinda didn't work, so people have they have to ask the same question multiple times. You know, the the questions don't show up on the Internet. So if you Google for stuff, you're not gonna find any of the questions that were asked on Discord. And generally speaking, you know, it it started to you know, there's some cracks showed up. There were some cracks at that skill for sure. So the the main points that we realized we wanted to solve is a, just that findability. Right? Make it accessible, make it accessible to the Internet, make it accessible and therefore and then and then the second part is make sure that it's in a in a structured format that is a little bit of QA rather than just check messages that are all, you know, intertwined like that. So, yeah, we we chose Discourse as sort of the tool for the job, and that's now accessible. Yes. It is. So you can view it without a, an account or you can make an account and you can start posting and liking things. What's happening to the current Discord? Was is it completely going? Are we are we shutting it down? Oh, no. No. No. No. No. No. So what Discord is really good for is active chatting, obviously. I mean, it's a chat platform. Right? So we're gonna keep it around for chatting with the community and just talking to each other, talking with contributors, talking to, you know, folks in the community in general. But we are explicitly saying, hey. Discourse is just the better tool for the job when it comes to q and a. So if you have any questions around Directus or how to use it or you're running into something, Discourse is gonna be the place to go. Right? Community.directus.ao. And for everything else, if you just, you know, wanna chat, wanna hang out, Discord is gonna stick around. I'm gonna give you a very quick tour of the new community platform. If you head over to community.directors.io, you'll land here, which has all of the top posts. You can also filter from all time, year, quarter, month, week or on today. There's also the ability to see the latest activity on posts. You can also filter with tags or in categories. So for example, if you want to see the showcases, here you go. You have the ability to sign up with your Google, your GitHub, your Discord or your email address. Once you've signed in 'here I am is definitely not Beth' you'll be able to post topics, so you can pick whichever category is the right one for your post and any tags that relate to it as well as a title and a body of text. You can also interact with other people's posts by liking, you've got a few choice of different emojis, as well as replying. If you've got any questions about the new platform or what's happening with Discord or anything else, let us know. The general chat in Discord is still available or make a new topic on our community platform. Welcome back to another episode of Short Hops. I'm your host Brian Gillespie. And in this episode, I'm gonna give you one of the coolest tips and tricks that I've probably ever shared here on Short Hops. So stick with me on this one. It's really cool. Alright. So what are we focused on today? We're gonna build a better user experience using filters on our relational interfaces. That is a mouthful, kind of underwhelming title. But let's dive into an example project and I'll show you what we've got going on. So this is a sample Directus instance. This is my agency OS project that we put out under the Directus Labs organization. Be sure to check that out. But I wanna show you the scenario. So I'm creating a project in here and we've got an organization and we could add multiple contacts to this. So a a project belongs to an organization. Let's go with Tesla, in this case, pretty ambiguous name. And then I want to add an existing contact to this. But you could see here here's my problem. If I take a look, I get all the contacts for this. So, you know, I'm only wanting to be able to select contacts that are at Tesla. So this is kind of a a dependency here. How do we manage something like this? So I'm just gonna open the settings. We're gonna go into our data model. I'm gonna look for the projects collection. And here inside organization, we've got contacts right beside it. What I'm looking for, you know, we could see the relationship tab and how all these things come together. But when I go into the interface, and this is a mini to mini collection or relationship, so you'll have to be mindful of how you've got your relationship set up. But if I want to set that up dependent upon a field that we already have, I could do something like this. Down here in my filter, you know, I could go in and and like hard code a value of, you know, show me all the contacts where the name contains Ashley. But we want this to be dynamic, right? So I'm gonna drill into our organizations. This is a many to many relationship. And I'm gonna say organizations dot ID equals, and I could do this. So I'm gonna do mustache brackets here, hold on, and And I'm gonna do organization, which is the name of that other field inside our data model. Alright. Great. So let's take a look at this and we'll go back. We'll create a new project. Right now if I click add existing, no contact show up. How come? Right? So what I could do here, we'll say direct us test. That's the company we wanna do this project for. And now I only see the contacts who are part of that organization. Right? Likewise, if I change this to Tesla, I open it up and I see I've got Elon Musk here as the only option to select. So that's it. Take a look at the filter on any of the relational interfaces that you've set up. This is a a nice little technique to use in certain scenarios like this one. That's it for this episode. Stay tuned for the next one. We want to take a moment towards the end of the change log for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been three contributors. A huge thank you to Osman for fixing duplicate values for is one off filter, Gevelium for ensuring that the context menu of a field in the data model settings appear at full height, and to Ziles for adding data collection and field name attributes to parent wrapper for all form elements. Thank you again. You can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of April who financially contribute to their Exodus development. A huge thank you to Weifan, Entel, Mike, Fergus, Omar, Marcus, Mission Control, Peter, Utomic, Steven, James, Nonlinear, Andreas, Khan, John, Jamiluddin, Burb, Adam, Jason, Birka, Yuya, Vincent, CK, Valentino, Jens, Wayne, and Yannis. The money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. That is everything for this month's changelog. Thank you so much. If you've made it to this point, you are incredible, and I appreciate you spending the time with us. I hope to see you next month. In the meantime, do go check out the new community platform. And if you've got any questions, you've got two choices now. You can either go into the Discord or you can be top tier and go to our new community platform. So please go see you over there and let go and check out more of what's been going on. Have a great rest of your day, your week, and your month, everyone, and I will see you again shortly.","457acc4a-f193-4bd7-b6d3-127bf4d616c4",[348,349,350,351],"24edf573-77d1-4b4c-a73e-95d3b309791f","6b0b7e92-d84a-427f-987e-060483ae26fc","c080c42f-3987-4338-9b04-f7c36fdbd5f1","e3c418a9-d6dc-4a25-96ee-ab0debfc4c2e",[],{"id":139,"number":140,"show":122,"year":141,"episodes":354},[143,144,145,146,147,148,149,150],{"id":148,"slug":356,"vimeo_id":357,"description":339,"tile":358,"length":359,"resources":8,"people":8,"episode_number":360,"published":361,"title":362,"video_transcript_html":363,"video_transcript_text":364,"content":8,"seo":365,"status":130,"episode_people":366,"recommendations":369,"season":370},"June-2025","1090433878","0486cf9a-d86d-467c-9907-c097982adfb8",28,11,"2025-06-12","June 2025","\u003Cp>Speaker 0: Hello, everyone. Welcome to June's version of the changelog. If you're new, I'm Beth, and I'm gonna be taking you through what we've got in store for you today. Whether you are joining us live or on demand, do let us know if you've got any questions. If you are live, then we've got the chat running.\u003C/p>\u003Cp>And, otherwise, it's community.directus.io. And if you do have any questions along the way, we'll do our best to get them answered for you. I hope you're having a great start to your day, week, and month, and we're gonna be kicking off with product updates from me this month. So I'm gonna be kicking that off now. Alright.\u003C/p>\u003Cp>For Directus 11.8 released last month, there are a bunch of smaller improvements and bug fixes, so we're not gonna spend too much time going through it, but here are a couple of highlights. We've added the ability to have a toggle variable input for the in and in filters. We fixed relation creation to files and added filters to files and image interfaces. And finally, IP, user agent, and origin are now tracked in the activity records for WebSocket activity. That's a really short overview of some of the things we've been up to this month.\u003C/p>\u003Cp>If you'd like to see the full release notes, they're available on GitHub. This month, we have six new tutorials across two themes, submitting forms using Directus and integrating the Directus visual editor. And you can find those in Next. Js, Nuxt, and SvelteKit. Go check them out.\u003C/p>\u003Cp>They're in the docs at directors.i0/docs/tutorials. Alright. And something else that's new with us this month is the directors MCP server, which we've got a demo from Brian coming next.\u003C/p>\u003Cp>Speaker 1: Hey. What's up, guys? Brian here. And in this video, I'm gonna show you how to use AI tools like Cloud Desktop to quickly build landing pages inside Directus CMS. Alright.\u003C/p>\u003Cp>So I've got this prompt up, and this is the time that I've actually tried this prompt, so we'll see how it goes. Basically, I want Cloud Desktop to create a landing page inside my Directus instance for me. Now this is a complicated endeavor, because, one of the the huge benefits of Directus is the ability to create pages dynamically using our many to any relationships. Basically, page blocks. Right?\u003C/p>\u003Cp>So a page can be made up of a bunch of different blocks and each block with its own schema, its own data model, and its own presentation on the front end of the website. So it makes it really easy. I can also edit these things visually. But, still scaffolding out these pages, can be time consuming. There's no way around it.\u003C/p>\u003Cp>Like, we've gotta rearrange blocks on a page. So let's use Claude and this prompt that I've got set up. So I'm just gonna go here to my prompt section. We're gonna create a landing page. And the way this prompt works, basically, I've got a bunch of variables to fill in and the direct us content MCP picks up those variables that I've included in either the message or the system prompt and prompts me to fill those out.\u003C/p>\u003Cp>So, draft a landing page for a specific audience based on an idea or topic. So we're selling Directus the AI ready CMS. Cool. Desired action is going to be sign up for cloud instance. You could check this out on cloud.\u003C/p>\u003Cp>There's also a command that you can run-in our documentation to get this full CMS set up locally. Value proposition. AI plus Directus eliminates busy work and death by a thousand cuts. Descriptive tone, we wanna use professional but friendly and confident, super relatable. Alright.\u003C/p>\u003Cp>The audience that we're aiming for, technical marketers and developers. Specific pain points. Where's the pain point? Other solutions, too slow, too complicated, don't do enough. Specific solution outcome, Directus CMS is the best.\u003C/p>\u003Cp>Level of knowledge, mildly aware. Alright. This is a super detailed prompt, so I'm expecting the results to be amazing. Don't want to switch systems, migration pane, costs, etcetera. Alright.\u003C/p>\u003Cp>So this is our prompt. Basically, it has filled out all those variables for us. It's gonna send that to Claude, and we're gonna start building out this landing page. Right? So you're seeing this the time, same as me.\u003C/p>\u003Cp>What's happening behind the scenes? The Directus Content MCP server is feeding these tools to Claude. Claude is calling its system prompt, that we've set up. So, hey. You're a Directus assistant.\u003C/p>\u003Cp>Here's what you've got access to. It has understood our schema. So it understands the specific data model that it's working with. Right? And now it is working its way through the landing page.\u003C/p>\u003Cp>And here we could see it's already created the page. Right? So if I just refresh, Directus, the AI ready CMS, eliminate busy work forever. Right? So here's our page, and we don't see any blocks though.\u003C/p>\u003Cp>Right? Of course, this is also still a draft. But what's happening here is because the MCP and, by consequence of the LLM is now aware of my specific data model in Directus, it can go through and create these blocks for me that are a 100% on brand, that are a 100% correct to our data model. And let's see what it comes up with. Right?\u003C/p>\u003Cp>We got a CTA button group. It's adding buttons within that. See the live demo. Start a free cloud instance. That's our main, callout that we said.\u003C/p>\u003Cp>It's even picked up the Directus cloud registration URL just somewhere in the ether, problem agitation section. So it's doing a ton of work on my behalf here and actually creating these blocks inside Directus, and then it's gonna come back and actually add those blocks to the page. Now if you were to scaffold this out yourself, maybe you're super efficient. Yeah. It's still gonna take you a while and you're gonna have to fill out a lot of these fields.\u003C/p>\u003Cp>So now it's going to add all this for us and the end result is gonna be something that we can come back and just edit manually. Right? So here I see all the different sections. It is creating all those for us. And this is what it's all about.\u003C/p>\u003Cp>Right? I don't know about you, but in sci fi, when I was a little kid, we were promised this dream of computers doing a lot of work for us, taking our ideas and and helping us achieve the result. So here's our landing page. I'm just gonna hit refresh, And maybe we wanna actually open this in the Directus visual editor so I can start going through this personally. Alright?\u003C/p>\u003Cp>So stop fighting your CMS. Start building. Other CMSs are too slow, too complicated, and don't do enough. Get back to what matters. Creating amazing digital experiences.\u003C/p>\u003Cp>So there's our headline. Here's kind of the problem agitation. Traditional CMSs weren't built for AI powered workflows. What if your CMS actually worked with you? We've got a pricing block, and it looks like it did miss some of the format here for this, which I'm curious about.\u003C/p>\u003Cp>But, we've got this landing page all scaffolded out. I could go in and manually adjust any of this that I need. Adjust any of this content. Command s for save and see those changes live. But this, wow, that is using the Directus Content MCP to build your landing pages out for you so you can go in and tweak them so they're just perfect.\u003C/p>\u003Cp>Speaker 0: Alright. It's super exciting. And if you want more information, Bryant has done a great post on our forum for having much more explanation than that. And if you have the tag on AI, if you're searching for it, you can find it, or I've just put the link to the post, over in comments on directors.i0/tv/live if you are joining us live. Speaking of the community forum, our next segment is again Brian with a special edition of community hotline.\u003C/p>\u003Cp>Speaker 1: Alright. Alright. Welcome back. We are live on the Directus community hotline. I'm your host Brian Gillespie.\u003C/p>\u003Cp>Today, we are answering a question from community member, RHB. RHB, what's up, sir? Glad to have you inside the community. Let's get to your question. Thanks.\u003C/p>\u003Cp>But is there an automated way to generate API docs for my custom collections inside Directus? The open API spec that generates that Directus generates is massive, and 99% of it is system stuff I don't need. I just want clean docs for my own collections like products, customers, services, etcetera. Anyone know of a tool or script that could filter the open API spec to only include my collections? Or maybe there's a better approach entirely.\u003C/p>\u003Cp>Well, I'm not sure of a tool or a script, but I can give you a better approach. Let's dive into it. So, this is familiar to probably everyone. This is like the swagger spec. This is kind of the out of the box API documentation.\u003C/p>\u003Cp>This is just their pet store demo. But, one of the nice things about Directus, I know I say this a lot in videos, is the ability to generate this open API spec. So I could just come to server slash specs slash o a s and get the full open API spec. It's beautiful. Now, it is very comprehensive in that every single API endpoint that the current user has access to will be shown here.\u003C/p>\u003Cp>So we can kinda see which way we're leading here. The easiest way to get a filtered list for your API spec is just to use a user to grab the API spec that has lowered permissions, restricted permissions. Permissions just to the collections that we want in the spec. So how can we do that? We're gonna go into Directus settings, and I'm just gonna create an access policy for this.\u003C/p>\u003Cp>Now technically, again, just use any user that has the correct permissions that you want and generate the open API spec. But to make this super clear, we're just gonna generate a new policy called API spec, and I'm gonna add two collections to this. Just pages. We'll give all crud access. Not trying to print the page.\u003C/p>\u003Cp>We'll do posts. Great. We'll give all crud. We'll take away the shares. I don't typically use those a lot.\u003C/p>\u003Cp>Okay. So now we'll we've got this policy. We're gonna go in and create a user, and I'm just gonna call this one, surprise surprise, API spec user. Great. What do we need to actually pull this off?\u003C/p>\u003Cp>Right? We don't have to add a role. Directus 11 was really nice in that, we got permission or we got support for access policies. So we can, roll up policies up to the role level or I could just add them directly to specific users in this case. So we're just gonna add API spec.\u003C/p>\u003Cp>I'm gonna generate a token. And now I'm gonna hop over to Swagger and I'm gonna add my direct us URL. I'm going to go to this endpoint, server slash specs slash o s, and I'm gonna add a query param for access token. Now this is definitely, do what I say, don't do what I do. Adding the access token as a query param is not safe, doing it just for demonstration purposes here.\u003C/p>\u003Cp>Make sure, you know, you're passing that is an authorization header, for the bearer token. So I'm just gonna hit explore and server specs OAS. Let's try again. Grab the token, got the API spec, save, explore. Server spec, forgot an s.\u003C/p>\u003Cp>Gotta get the s in there. Okay. So now we're going to see, we'll see the authentication endpoints just because those are always available. Right? The server health endpoints.\u003C/p>\u003Cp>Okay. Great. But if I take a look now, I don't see a giant list of endpoints. I just see pages, and I just see posts. And, again, I can use Swagger to test those out, but this is the best way to filter down that list, without running extra scripts or extra processing on it.\u003C/p>\u003Cp>So RHB, I hope this is helpful for you, man. The other thing that I wanna show you, if you go into the marketplace, we've got several extensions that could get the job done for you as well potentially. So if you just search rapid in the marketplace, there's an API viewer extension, a rapid docus extension that allows you to view that open API spec without ever leaving the Directus App Studio. If you would like your question to be featured on Community Hopeline or you just have Directus questions in general, hop into our community at community.directus.io, post your question, and you may be featured on the next episode. We'll see you.\u003C/p>\u003Cp>Speaker 0: Alright. Thank you so much to Brian for both of those amazing segments. It's always a treat. As we're approaching the end of the show or towards the end, we have our final segment, which is from Carmen, and it is an episode of Translation Station.\u003C/p>\u003Cp>Speaker 2: Carmen. Suite developer educator share direct translation station. Translation station. Alright. Back to English.\u003C/p>\u003Cp>So here we've got a Directus project dedicated for storing my blog posts. Now amongst the collections, we can see posts. And I'd like to take a minute to take a look at the structure or the data model of these posts. Gonna hop over to the settings module and take a look at posts itself. So we can see a variety of fields here.\u003C/p>\u003Cp>And the ones I want to highlight are slug, which will help us build a URL to find our post in our application. Next, we've got the title and the content. Another field I want to highlight is translations. Now I've gone ahead and created some translations for our blog posts. If you want to find out how to translate your content in the data studio, check out our data studio content translations episode of Translation Station.\u003C/p>\u003Cp>Back in our data model, I also want to take a look at post translations, which is a hidden field that holds the translation data for each of our posts. You can see we've got the title and the content. Let's now take a look at the post itself. We've got the ultimate guide to rabbits, which is written in both English. Scroll down here.\u003C/p>\u003Cp>As well as French. So I'm going to show you how you can build an application to retrieve translations of your blog posts. So what we have here is an application written in Nuxt, which uses three ways of accessing our translated blog posts. One is using the Directus SDK. One is using the REST API of our Directus project.\u003C/p>\u003Cp>And the last is using the GraphQL endpoint of our Directus project. I'm gonna give you a short tour of this Nuxt application. we set up our environment, which will connect to our Directus project and proxy accordingly to go to local host 3,000 slash Directus so that we can access our data. So let's start with the SDK. I've set up a Nuxt plugin here, which instantiates a Directus client and makes it available to my Nuxt application.\u003C/p>\u003Cp>By going to SDK slash the language code of the content slash the slug of the blog post, we're going to retrieve and display the translated data for our blog post. Let's walk through this real quick. we instantiate our client and set up the retrieval of the parameters and a reference for the post itself. Then we asynchronously use the direct client to read several posts. Using the deep and filter parameters, we're going to grab the blog post that corresponds to the slug given in our URL as well as the translation itself for that locale.\u003C/p>\u003Cp>We then make available the data of the translations into the result and limit to one just for good measure. Once we have that, we grab the translation itself from that payload and display it accordingly. Let's take a look at it in action. So here we are. We've gone to local host 3,000 in my running Nuxt application slash sdk slash en u s, that's for English, slash the ultimate guide to rabbits.\u003C/p>\u003Cp>And that gives us my blog post. To view it in French, I just have to change my URL to frfr. Check it out. Now it's in French. Fantastic.\u003C/p>\u003Cp>Let's see how it's done with REST now. All right. So we won't be using our SDK client and instead we'll be using the fetch API in order to retrieve the posts that match the slug as well as the locale itself. And then retrieving as fields, the translation title, content, and the language code. Limited to one for good measure.\u003C/p>\u003Cp>Then we retrieve the translation with the correct language code from our locale. And then just like before, if there's a post, we display its content. Let's see it in action. Back in my browser, I'm going to go to rest slash en dash us slash the ultimate guide to rabbits. Access that, and there's our English blog post.\u003C/p>\u003Cp>And for French, f r dash f r. And there we go. All good and in French. One more. Let's look at GraphQL.\u003C/p>\u003Cp>So just like with the REST API, we'll be using fetch, grab the GraphQL data. we'll build our query, which will filter out the posts by slug and specifically filter out the translations by the language code alongside that translation's title and content. Then we make a request to the GraphQL endpoint of our Directus project, and then set that post value to have that translation data. Then just like before, if we have a post, we go ahead and display it. Let's have a look.\u003C/p>\u003Cp>All right. Back in our browser, let's go to graph QL slash en dash us slash the ultimate guide to rabbits. And there we go. There it is in English. Now let's try it in French.\u003C/p>\u003Cp>Wonderful. So that's the three ways we can access our translated data from our direct Us projects API. Alright. Well, there you have it. How to access your translated content from Directus using our APIs and SDKs.\u003C/p>\u003Cp>But that's not the only stop on this translation station journey we're on. If you wanna learn how to translate Directus directly or where it gets translated, how to use translation strings, or how to translate your content, check out the other episodes of Translation Station. So I hope this was helpful, and I'll see you on the next stop of Translation Station. Bye for now.\u003C/p>\u003Cp>Speaker 0: We want to take a moment towards the end of the changelog for thanking our community contributors who give their time and expertise to improve the directors project. Since last month there have been five contributors. A huge thank you to Bruno for ensuring the configured display format is applied to the Kanban layout, Mehdi for enhancing the appearance of the flow trigger buttons in the sidebar by applying their custom colors, a FAQ for ensuring the flow logs with color indications for success and failure and adding a new filter to view only failed logs, AMOS for fixing permissions handling in the files module and for adding new action events for extensions, Nico for fixing admin password, admin token, key, and secret to always be interpreted as strings. A huge thank you once again. You can see their specific pull requests inside of the full release notes on GitHub.\u003C/p>\u003Cp>Lastly, we also want to take the time to thank our GitHub sponsors of May who kindly financially contribute to Directus' development. A huge thank you to Wayfam, Hintle, Mike, Fergus, Omar, Marcus, Mission Control, Peter, Utomic, Steven, James, nonlinear, Andreas, Reza, John, Jamilinin, Barb, Adam, Jason, Barker, Yuya, Vincent, CK, Valentino, Jens, Wayne, and Avi. The money we are given from our GitHub sponsors go straight back to community members who build tooling and extensions for the direct to see ecosystem. Thank Thank you again for being part of that. Alright.\u003C/p>\u003Cp>And that is the show for this month. As always, if you've got any feedback about things you would like to see in upcoming shows, do let us know. But other than that, thank you so much for taking the time to spend with us. We really appreciate it. We hope you found this useful.\u003C/p>\u003Cp>And, yeah, take care, and we'll see you next month.\u003C/p>","Hello, everyone. Welcome to June's version of the changelog. If you're new, I'm Beth, and I'm gonna be taking you through what we've got in store for you today. Whether you are joining us live or on demand, do let us know if you've got any questions. If you are live, then we've got the chat running. And, otherwise, it's community.directus.io. And if you do have any questions along the way, we'll do our best to get them answered for you. I hope you're having a great start to your day, week, and month, and we're gonna be kicking off with product updates from me this month. So I'm gonna be kicking that off now. Alright. For Directus 11.8 released last month, there are a bunch of smaller improvements and bug fixes, so we're not gonna spend too much time going through it, but here are a couple of highlights. We've added the ability to have a toggle variable input for the in and in filters. We fixed relation creation to files and added filters to files and image interfaces. And finally, IP, user agent, and origin are now tracked in the activity records for WebSocket activity. That's a really short overview of some of the things we've been up to this month. If you'd like to see the full release notes, they're available on GitHub. This month, we have six new tutorials across two themes, submitting forms using Directus and integrating the Directus visual editor. And you can find those in Next. Js, Nuxt, and SvelteKit. Go check them out. They're in the docs at directors.i0/docs/tutorials. Alright. And something else that's new with us this month is the directors MCP server, which we've got a demo from Brian coming next. Hey. What's up, guys? Brian here. And in this video, I'm gonna show you how to use AI tools like Cloud Desktop to quickly build landing pages inside Directus CMS. Alright. So I've got this prompt up, and this is the time that I've actually tried this prompt, so we'll see how it goes. Basically, I want Cloud Desktop to create a landing page inside my Directus instance for me. Now this is a complicated endeavor, because, one of the the huge benefits of Directus is the ability to create pages dynamically using our many to any relationships. Basically, page blocks. Right? So a page can be made up of a bunch of different blocks and each block with its own schema, its own data model, and its own presentation on the front end of the website. So it makes it really easy. I can also edit these things visually. But, still scaffolding out these pages, can be time consuming. There's no way around it. Like, we've gotta rearrange blocks on a page. So let's use Claude and this prompt that I've got set up. So I'm just gonna go here to my prompt section. We're gonna create a landing page. And the way this prompt works, basically, I've got a bunch of variables to fill in and the direct us content MCP picks up those variables that I've included in either the message or the system prompt and prompts me to fill those out. So, draft a landing page for a specific audience based on an idea or topic. So we're selling Directus the AI ready CMS. Cool. Desired action is going to be sign up for cloud instance. You could check this out on cloud. There's also a command that you can run-in our documentation to get this full CMS set up locally. Value proposition. AI plus Directus eliminates busy work and death by a thousand cuts. Descriptive tone, we wanna use professional but friendly and confident, super relatable. Alright. The audience that we're aiming for, technical marketers and developers. Specific pain points. Where's the pain point? Other solutions, too slow, too complicated, don't do enough. Specific solution outcome, Directus CMS is the best. Level of knowledge, mildly aware. Alright. This is a super detailed prompt, so I'm expecting the results to be amazing. Don't want to switch systems, migration pane, costs, etcetera. Alright. So this is our prompt. Basically, it has filled out all those variables for us. It's gonna send that to Claude, and we're gonna start building out this landing page. Right? So you're seeing this the time, same as me. What's happening behind the scenes? The Directus Content MCP server is feeding these tools to Claude. Claude is calling its system prompt, that we've set up. So, hey. You're a Directus assistant. Here's what you've got access to. It has understood our schema. So it understands the specific data model that it's working with. Right? And now it is working its way through the landing page. And here we could see it's already created the page. Right? So if I just refresh, Directus, the AI ready CMS, eliminate busy work forever. Right? So here's our page, and we don't see any blocks though. Right? Of course, this is also still a draft. But what's happening here is because the MCP and, by consequence of the LLM is now aware of my specific data model in Directus, it can go through and create these blocks for me that are a 100% on brand, that are a 100% correct to our data model. And let's see what it comes up with. Right? We got a CTA button group. It's adding buttons within that. See the live demo. Start a free cloud instance. That's our main, callout that we said. It's even picked up the Directus cloud registration URL just somewhere in the ether, problem agitation section. So it's doing a ton of work on my behalf here and actually creating these blocks inside Directus, and then it's gonna come back and actually add those blocks to the page. Now if you were to scaffold this out yourself, maybe you're super efficient. Yeah. It's still gonna take you a while and you're gonna have to fill out a lot of these fields. So now it's going to add all this for us and the end result is gonna be something that we can come back and just edit manually. Right? So here I see all the different sections. It is creating all those for us. And this is what it's all about. Right? I don't know about you, but in sci fi, when I was a little kid, we were promised this dream of computers doing a lot of work for us, taking our ideas and and helping us achieve the result. So here's our landing page. I'm just gonna hit refresh, And maybe we wanna actually open this in the Directus visual editor so I can start going through this personally. Alright? So stop fighting your CMS. Start building. Other CMSs are too slow, too complicated, and don't do enough. Get back to what matters. Creating amazing digital experiences. So there's our headline. Here's kind of the problem agitation. Traditional CMSs weren't built for AI powered workflows. What if your CMS actually worked with you? We've got a pricing block, and it looks like it did miss some of the format here for this, which I'm curious about. But, we've got this landing page all scaffolded out. I could go in and manually adjust any of this that I need. Adjust any of this content. Command s for save and see those changes live. But this, wow, that is using the Directus Content MCP to build your landing pages out for you so you can go in and tweak them so they're just perfect. Alright. It's super exciting. And if you want more information, Bryant has done a great post on our forum for having much more explanation than that. And if you have the tag on AI, if you're searching for it, you can find it, or I've just put the link to the post, over in comments on directors.i0/tv/live if you are joining us live. Speaking of the community forum, our next segment is again Brian with a special edition of community hotline. Alright. Alright. Welcome back. We are live on the Directus community hotline. I'm your host Brian Gillespie. Today, we are answering a question from community member, RHB. RHB, what's up, sir? Glad to have you inside the community. Let's get to your question. Thanks. But is there an automated way to generate API docs for my custom collections inside Directus? The open API spec that generates that Directus generates is massive, and 99% of it is system stuff I don't need. I just want clean docs for my own collections like products, customers, services, etcetera. Anyone know of a tool or script that could filter the open API spec to only include my collections? Or maybe there's a better approach entirely. Well, I'm not sure of a tool or a script, but I can give you a better approach. Let's dive into it. So, this is familiar to probably everyone. This is like the swagger spec. This is kind of the out of the box API documentation. This is just their pet store demo. But, one of the nice things about Directus, I know I say this a lot in videos, is the ability to generate this open API spec. So I could just come to server slash specs slash o a s and get the full open API spec. It's beautiful. Now, it is very comprehensive in that every single API endpoint that the current user has access to will be shown here. So we can kinda see which way we're leading here. The easiest way to get a filtered list for your API spec is just to use a user to grab the API spec that has lowered permissions, restricted permissions. Permissions just to the collections that we want in the spec. So how can we do that? We're gonna go into Directus settings, and I'm just gonna create an access policy for this. Now technically, again, just use any user that has the correct permissions that you want and generate the open API spec. But to make this super clear, we're just gonna generate a new policy called API spec, and I'm gonna add two collections to this. Just pages. We'll give all crud access. Not trying to print the page. We'll do posts. Great. We'll give all crud. We'll take away the shares. I don't typically use those a lot. Okay. So now we'll we've got this policy. We're gonna go in and create a user, and I'm just gonna call this one, surprise surprise, API spec user. Great. What do we need to actually pull this off? Right? We don't have to add a role. Directus 11 was really nice in that, we got permission or we got support for access policies. So we can, roll up policies up to the role level or I could just add them directly to specific users in this case. So we're just gonna add API spec. I'm gonna generate a token. And now I'm gonna hop over to Swagger and I'm gonna add my direct us URL. I'm going to go to this endpoint, server slash specs slash o s, and I'm gonna add a query param for access token. Now this is definitely, do what I say, don't do what I do. Adding the access token as a query param is not safe, doing it just for demonstration purposes here. Make sure, you know, you're passing that is an authorization header, for the bearer token. So I'm just gonna hit explore and server specs OAS. Let's try again. Grab the token, got the API spec, save, explore. Server spec, forgot an s. Gotta get the s in there. Okay. So now we're going to see, we'll see the authentication endpoints just because those are always available. Right? The server health endpoints. Okay. Great. But if I take a look now, I don't see a giant list of endpoints. I just see pages, and I just see posts. And, again, I can use Swagger to test those out, but this is the best way to filter down that list, without running extra scripts or extra processing on it. So RHB, I hope this is helpful for you, man. The other thing that I wanna show you, if you go into the marketplace, we've got several extensions that could get the job done for you as well potentially. So if you just search rapid in the marketplace, there's an API viewer extension, a rapid docus extension that allows you to view that open API spec without ever leaving the Directus App Studio. If you would like your question to be featured on Community Hopeline or you just have Directus questions in general, hop into our community at community.directus.io, post your question, and you may be featured on the next episode. We'll see you. Alright. Thank you so much to Brian for both of those amazing segments. It's always a treat. As we're approaching the end of the show or towards the end, we have our final segment, which is from Carmen, and it is an episode of Translation Station. Carmen. Suite developer educator share direct translation station. Translation station. Alright. Back to English. So here we've got a Directus project dedicated for storing my blog posts. Now amongst the collections, we can see posts. And I'd like to take a minute to take a look at the structure or the data model of these posts. Gonna hop over to the settings module and take a look at posts itself. So we can see a variety of fields here. And the ones I want to highlight are slug, which will help us build a URL to find our post in our application. Next, we've got the title and the content. Another field I want to highlight is translations. Now I've gone ahead and created some translations for our blog posts. If you want to find out how to translate your content in the data studio, check out our data studio content translations episode of Translation Station. Back in our data model, I also want to take a look at post translations, which is a hidden field that holds the translation data for each of our posts. You can see we've got the title and the content. Let's now take a look at the post itself. We've got the ultimate guide to rabbits, which is written in both English. Scroll down here. As well as French. So I'm going to show you how you can build an application to retrieve translations of your blog posts. So what we have here is an application written in Nuxt, which uses three ways of accessing our translated blog posts. One is using the Directus SDK. One is using the REST API of our Directus project. And the last is using the GraphQL endpoint of our Directus project. I'm gonna give you a short tour of this Nuxt application. we set up our environment, which will connect to our Directus project and proxy accordingly to go to local host 3,000 slash Directus so that we can access our data. So let's start with the SDK. I've set up a Nuxt plugin here, which instantiates a Directus client and makes it available to my Nuxt application. By going to SDK slash the language code of the content slash the slug of the blog post, we're going to retrieve and display the translated data for our blog post. Let's walk through this real quick. we instantiate our client and set up the retrieval of the parameters and a reference for the post itself. Then we asynchronously use the direct client to read several posts. Using the deep and filter parameters, we're going to grab the blog post that corresponds to the slug given in our URL as well as the translation itself for that locale. We then make available the data of the translations into the result and limit to one just for good measure. Once we have that, we grab the translation itself from that payload and display it accordingly. Let's take a look at it in action. So here we are. We've gone to local host 3,000 in my running Nuxt application slash sdk slash en u s, that's for English, slash the ultimate guide to rabbits. And that gives us my blog post. To view it in French, I just have to change my URL to frfr. Check it out. Now it's in French. Fantastic. Let's see how it's done with REST now. All right. So we won't be using our SDK client and instead we'll be using the fetch API in order to retrieve the posts that match the slug as well as the locale itself. And then retrieving as fields, the translation title, content, and the language code. Limited to one for good measure. Then we retrieve the translation with the correct language code from our locale. And then just like before, if there's a post, we display its content. Let's see it in action. Back in my browser, I'm going to go to rest slash en dash us slash the ultimate guide to rabbits. Access that, and there's our English blog post. And for French, f r dash f r. And there we go. All good and in French. One more. Let's look at GraphQL. So just like with the REST API, we'll be using fetch, grab the GraphQL data. we'll build our query, which will filter out the posts by slug and specifically filter out the translations by the language code alongside that translation's title and content. Then we make a request to the GraphQL endpoint of our Directus project, and then set that post value to have that translation data. Then just like before, if we have a post, we go ahead and display it. Let's have a look. All right. Back in our browser, let's go to graph QL slash en dash us slash the ultimate guide to rabbits. And there we go. There it is in English. Now let's try it in French. Wonderful. So that's the three ways we can access our translated data from our direct Us projects API. Alright. Well, there you have it. How to access your translated content from Directus using our APIs and SDKs. But that's not the only stop on this translation station journey we're on. If you wanna learn how to translate Directus directly or where it gets translated, how to use translation strings, or how to translate your content, check out the other episodes of Translation Station. So I hope this was helpful, and I'll see you on the next stop of Translation Station. Bye for now. We want to take a moment towards the end of the changelog for thanking our community contributors who give their time and expertise to improve the directors project. Since last month there have been five contributors. A huge thank you to Bruno for ensuring the configured display format is applied to the Kanban layout, Mehdi for enhancing the appearance of the flow trigger buttons in the sidebar by applying their custom colors, a FAQ for ensuring the flow logs with color indications for success and failure and adding a new filter to view only failed logs, AMOS for fixing permissions handling in the files module and for adding new action events for extensions, Nico for fixing admin password, admin token, key, and secret to always be interpreted as strings. A huge thank you once again. You can see their specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub sponsors of May who kindly financially contribute to Directus' development. A huge thank you to Wayfam, Hintle, Mike, Fergus, Omar, Marcus, Mission Control, Peter, Utomic, Steven, James, nonlinear, Andreas, Reza, John, Jamilinin, Barb, Adam, Jason, Barker, Yuya, Vincent, CK, Valentino, Jens, Wayne, and Avi. The money we are given from our GitHub sponsors go straight back to community members who build tooling and extensions for the direct to see ecosystem. Thank Thank you again for being part of that. Alright. And that is the show for this month. As always, if you've got any feedback about things you would like to see in upcoming shows, do let us know. But other than that, thank you so much for taking the time to spend with us. We really appreciate it. We hope you found this useful. And, yeah, take care, and we'll see you next month.","206ccef0-bd71-4595-aaec-4bd213a3653b",[367,368],"4c96fc0e-9390-4421-bf97-af82e87fe07f","aa6dfd6c-f2b9-4620-a427-952b2c0e42b1",[],{"id":139,"number":140,"show":122,"year":141,"episodes":371},[143,144,145,146,147,148,149,150],{"id":149,"slug":373,"vimeo_id":374,"description":339,"tile":375,"length":283,"resources":8,"people":8,"episode_number":376,"published":377,"title":378,"video_transcript_html":379,"video_transcript_text":380,"content":8,"seo":381,"status":130,"episode_people":382,"recommendations":385,"season":386},"July-25","1099308991","e9982a61-0c03-4dbe-b009-5f57f6e0ae78",12,"2025-07-09","July 2025","\u003Cp>Speaker 0: Alright. Hello, everyone. Welcome to July's version of the changelog from Directus. I'm Beth, and I'm gonna be taking you through what we've got in store for you today. Whether you are joining us live or you're catching up to this later, hi.\u003C/p>\u003Cp>Hello. Thank you for joining us. Welcome. Welcome if you are new. Thanks for joining us again if you are returning.\u003C/p>\u003Cp>If If you are joining us live and you've got any questions, do pop them in the chat. And if you are on YouTube or anything else like that, we will catch up with them later on. But for now, I am gonna kick us off by starting with the product updates.\u003C/p>\u003Cp>Speaker 1: Let's talk through some of the highlights for our most recent release, directors 11.9. There's some potential breaking changes to be aware of. We've added support for LDAP login and enhanced parameter consistency for refresh and logout commands. There's allowed overriding the mode in refresh and logout commands to be inline with login, and the login method now accepts a payload object instead of separate email and password parameters. We've added anonymous project ID for improved telemetry.\u003C/p>\u003Cp>We've also added backlink query parameter to exclude back relations when expanding queried fields. You can see the full release notes on GitHub.\u003C/p>\u003Cp>Speaker 0: Alright. Something else that's new is collaborative editing. So we've got Bryant talking you through that next.\u003C/p>\u003Cp>Speaker 2: It's officially time to stop, collaborate, and collaborate? Brian here from Directus. And today, super excited to show you collaborative editing, which has been one of the most requested features since I've been here at Directus. And it's big on the hit list. It's awesome.\u003C/p>\u003Cp>Let's take a look. So you could see I've got, two different browsers side by side, and I'm logged in, as myself over here and as, dramatic chipmunk over here on the right. And I'm just gonna open up one of my pages here, the home page. So I'm gonna start editing my home page. You know, maybe I wanna change the permalink.\u003C/p>\u003Cp>And, of course, I could see my own user avatar here, but, as dramatic chipmunk logs into this page, we could see now, I could see he is editing this, and, he's locked out of editing any fields that I'm working on. And likewise, on this side of it, I am locked out of editing any fields that he is working on. All these changes are happening in real time, and it does support relationships. So this is the best part. Right?\u003C/p>\u003Cp>Directus allows you to create relationships super easily, and then, you know, the relationships like many to any page builder are great for dynamic pages. So now I can work on a landing page collaboratively with my teammates. So you could see here any changes I make are reflected over here. And likewise, any changes you make are reflected there. Now that is collaborative editing.\u003C/p>\u003Cp>Super simple, super smooth. How do we actually enable this? This is an extension, so make sure you follow the instructions in the docs, download, and install the extension into your Directus instance. The next thing that you'll do is go to your settings. So I'm gonna go over here.\u003C/p>\u003Cp>Let's just go back to full screen. We're gonna go to the project settings. Go to the module bar. Once you have that extension installed, make sure that real time collaboration is checked, and that will add a new icon to the navigation. And you can enable this globally, which is the default.\u003C/p>\u003Cp>It's the easiest way to do it. It will work in the file library or in the user directory. Or if you prefer a more selective approach, maybe you've got some sensitive data that you don't want to, work collaboratively on, what you can do is go into the individual data model. So pick a collection and just search for the collaboration interface. You add that to the specific collection that you want, and then collaboration will only be enabled for that specific collection or collections that you enable it for.\u003C/p>\u003Cp>So that's it for collaborative editing. That's it for me. This thing is awesome. I hope you'll find it as awesome as I do. Kudos to our team and thank you for watching.\u003C/p>\u003Cp>Speaker 0: Alright. And if you wanna hear more or you've got any questions, we have a post on community.directors.io from Matt with lots of other info and some links which I will drop in the chat as well. Speaking of the community platform, the next segment is a community hotline.\u003C/p>\u003Cp>Speaker 2: And welcome back to the community hotline. I'm your host Brian Gillespie from Directus. Today, we are answering a question from Directus community member, Daryl Morley. Daryl, how are you, sir? Welcome to the community.\u003C/p>\u003Cp>Happy to have you. I'm gonna answer your question today in detail. Alright. So the question from Daryl. I'm integrating Directus with Lightspeed retail API.\u003C/p>\u003Cp>Not heard Lightspeed name in a long time. That's awesome though. Would like to use, for example, the category ID from Lightspeed as the primary key in my categories collection within Directus. Here's the flow I'm aiming for. One, a the first step, a user creates a new category from the Directus admin UI.\u003C/p>\u003Cp>A before create hook fires that's not actually what it's called in Directus, but I got you. It creates a category inside Lightspeed via their API. We receive the category ID back from Lightspeed, and it sets that ID as the primary key of the new Directus record. The issue I'm running into is if the ID field is not auto generated, Directus requires you to provide an ID. Yeah.\u003C/p>\u003Cp>You gotta have that primary key for sure. But I can't know the ID until I call the Lightspeed API inside the hook. Prevents me from using the Lightspeed category ID as a Directus primary key. I could potentially store Lightspeed ID in a separate external category ID field, also an option. But then I run into difficulties linking my items to categories as, the directus only supports relationships using the primary key.\u003C/p>\u003Cp>You could establish relationships on that that other field as well, but I totally understand where you're coming from with this. And Daryl's pleading. Because anyone successfully implemented a setup like this or found a clean workaround, keeps everything in sync. Alright. So we are going to dive into this, Daryl.\u003C/p>\u003Cp>We are gonna solve this problem together right now. Alright. So I've got a blank direct us instance. We're gonna go in and let's create a new collection. I use plurals.\u003C/p>\u003Cp>We're gonna call it categories. Now every collection has to have a primary key. Typically, I just leave this set to ID for simplicity's sake, and usually I go with a generated UUID. We automatically generate that. In this case, where we want that to come from a third party, we are going to use a manually entered string.\u003C/p>\u003Cp>Now optional fields, I usually add these a 100% of the time. Not gonna do that here. I'm just gonna click finish setup, and what we're gonna do is just hit name. Let's add one more field for the name of this category, and this is our categories. Right?\u003C/p>\u003Cp>So now the challenge is if I go in, and this is a new category, just as you said, if I try to save this using command s or just hitting the save button here, requires a value. Well, that sucks. That's not what I wanna do. So how do we fix this? There's two ways I can solve this.\u003C/p>\u003Cp>I'm gonna show you flows first, and then we'll talk about hooks. Underneath the hood, they use the same event system. But, one way to do this inside the studio without writing much code or creating a custom extension that you've got to bundle and deploy, you could just do this in a flow. And if the logic is simple enough, it's it's easy to maintain. So we're gonna call this create category is the name of this flow, cool, in external API.\u003C/p>\u003Cp>Now I'm not actually gonna use the light speed API here just to keep this high level, but, yeah, you'll you'll figure that part of it out. Got faith in you. Got confidence. Alright. So we can trigger these flows a variety of different ways.\u003C/p>\u003Cp>Well, the one we're looking for is event hook, and then we're immediately asked the type of event hook. So there's two, obviously, that's on the screen. There's filter, which is, they said we say blocking here because it blocks that event from actually performing. This is the one that we want because we get a chance to it runs before the item gets saved in the database or before the item gets updated. We'll talk about that in a moment.\u003C/p>\u003Cp>Actions happen after the event is settled, so after the category has been created. In this case, we want to intercept that category as it's being created and before it's saved into the database, and we're gonna alter the payload. So that's what we're doing here. The scope, we just want items create. Right?\u003C/p>\u003Cp>Updated items should already have an ID, and we don't wanna complicate this. The response body is going to be our altered payload with this. So this is the payload that we're gonna save to the database. Now you can choose between all data or the data of the last operation. In this case, I'm just gonna keep this simple and choose data of the last operation to remove as many potential issues.\u003C/p>\u003Cp>Alright. So now we've got our trigger. The next thing that we wanna do is call the external API. Now, I could go in and just choose webhook request URL. I'm gonna hit call external API here.\u003C/p>\u003Cp>This is our step. In this case, it's gonna be a post. And I've just set up, like, a a mock endpoint, from some online free service that when we send this request, it should just send us an ID back. Cool. Alright.\u003C/p>\u003Cp>And now the last step, you know, and probably, like, that stuff you're getting back from Lightspeed, you're gonna wanna transform that payload. There's two ways to do that. And let's just call this payload. Right? I could use the run script operation where I've got the full power of JavaScript.\u003C/p>\u003Cp>Now you can import anything from NPM or use any libraries here, but you you've got, you know, the standard JavaScript library available to you here, and you can run, you know, just basic little functions there. Actually, you don't have the standard JavaScript library. This runs in an isolate, but you got all the basic JavaScript stuff that you're gonna need to transform a payload. The other way to do this is via the transform payload operation, which basically just allows you to adjust what is gonna come out of this thing. And you'll see we're using mustache syntax here for a reason.\u003C/p>\u003Cp>Every operation in a flow appends its data to a key that you can then access. So there's two that are special, which are accountability and dot trigger. That's why they have or I'm sorry, dollar sign trigger. That's why they have that dollar sign in front of them. But the rest of them, we could just do like this.\u003C/p>\u003Cp>So it'll be call external API, that's the key, and then we're just gonna get the ID. Right? Cool. Hit save. This is our flow.\u003C/p>\u003Cp>Super complicated, super messy. No. It's not. It's easy. And then we're gonna go in, and now we're gonna create a new category.\u003C/p>\u003Cp>So we hit new category. And oh, undefined. That's not good. What is happening here? Call external API.\u003C/p>\u003Cp>That's my key. Did we get some records back? Okay. Yep. So that's the issue.\u003C/p>\u003Cp>Right? Now I incorrectly formatted this. The thing that we're looking for is dot data dot ID. Alright. Always gotta do a bit of troubleshooting.\u003C/p>\u003Cp>I was hoping I was just gonna one shot that without any AI assistance, but, hey, it happens. And I also saw that we're missing the name. So in this case, you know, I'm just going to call the name. So we'll do trigger dot payload dot name. I think that's gonna be correct.\u003C/p>\u003Cp>Now, again, this is probably where you might wanna use something like JavaScript. But we can see here in our trigger, we have a payload. We have a name for the payload. Awesome. Alright.\u003C/p>\u003Cp>So now, fingers crossed, this should work or it's gonna error out because we can't have two categories with undefined. This is new category. Hit save, and voila, we've got an ID that has come from the ether. Now the other approach to do this, you know, if you prefer to express your logic as code and you wanna, you know, check that into Git, what you can do is just build an extension that does the same thing. Right?\u003C/p>\u003Cp>How do I do that? Well, go to our extension docs. So just go to guides, go to extensions, go to quick start, copy this code. I'm just gonna open up my terminal. We are going to put this here, APX direct us extension latest, and we're just gonna write a custom hook.\u003C/p>\u003Cp>And I'm going to even cheat and just use something that I've got in, another project. Alright. Choose a name for the extension. External ID, maybe. Sounds good.\u003C/p>\u003Cp>Cool. We're gonna use TypeScript, auto installer dependencies, and now I've got this external ID extension. It actually needs to be in my extensions folder here inside Directus. So, let's just blow this whole thing up and do that. My Directus project CD extensions slash external ID.\u003C/p>\u003Cp>Why does that not work? CD extensions. What is my directory? Oh, somehow I'm inside Directus. I could do that.\u003C/p>\u003Cp>CD extensions, external ID. Okay. And if I open this up, it's just an index dot ts file whenever the item is created. Let's pull up just something from my clipboard. Where are you?\u003C/p>\u003Cp>Okay. Cool. So this is a pattern that I've used quite a bit before. We're just gonna call this categories. Right?\u003C/p>\u003Cp>And we're gonna erase nano ID. We don't really need that. Cool. And we'll say, what, fetch? We could do a fetch call in here.\u003C/p>\u003Cp>Alright. Constant ID. You know what? Let's just let's keep it simple. Nano ID.\u003C/p>\u003Cp>Cool. So what this does, right, we define this hook, and we'll go into we see this filter that's on items dot create, and then we're passing in the payload, our schema from the direct us. And, we've got our accountability object, which we're not using at all here. But then we've got this constant that says, okay. These collections have to have a public ID.\u003C/p>\u003Cp>And in this case, I could just change it to ID. And all we're doing here is updating the payload and returning the payload. Payload has no ID. Alright. I'm gonna hit NPM build.\u003C/p>\u003Cp>Directus CD extensions. External ID. Cool. There we go. PMPM build.\u003C/p>\u003Cp>Build my extension. I just wanna show you one way that can get this done. And then I've got my directus instance. We're gonna need to restart that bad boy. So we'll hit restart.\u003C/p>\u003Cp>It should pick up that new extension. And fingers crossed. If we go to extensions, we could see that extension. And then I can deactivate. Let's not delete it entirely.\u003C/p>\u003Cp>So we'll just deactivate this flow, change the status to inactive. Cool. Got it. And now if I do this again, say test category. Fingers crossed.\u003C/p>\u003Cp>I know this is not gonna work. Oh, it does work. There we go. Test category. I was gonna say, I don't think I have Nano ID in installed, but maybe we're using that somewhere inside Directus itself.\u003C/p>\u003Cp>Cool. There it is. Couple different ways to achieve it. Hope this answers your question. Daryl, my man, thanks for joining the community.\u003C/p>\u003Cp>Appreciate you. Keep the questions coming. Keep the feedback coming. We love it. I'll see you next time on the community hotline.\u003C/p>\u003Cp>Hey, guys. Brian here for Directus. And in this video, I'm gonna show you how to use the Directus Content MCP server to organize and manage all of your assets inside your CMS. Now, this is a huge problem for any CMS, all the way back to the before WordPress times. Right?\u003C/p>\u003Cp>We've got a bunch of images that somebody uploads. I'll just copy paste this one in. And to beat it all, I'm just gonna rename this one image dot JPEG. Right? We're gonna download a nice little bunny that we're gonna paste in here.\u003C/p>\u003Cp>So we'll throw our bunny in there. Cool. Got the bunny. And let's do one more, maybe some ice cream. My kids are into ice cream, so that's what we'll do.\u003C/p>\u003Cp>And, again, like, one of the other nice things about Directus, I can always import from a URL instead of a, actually, a file. So there we go, right? And here in lies the problem with every asset management inside of CMS is we end up with a bunch of stuff that makes no sense, has no metadata, basically impossible to search. So q, the direct as content MCP server, and Claude. So I am going to use my prompt here, and it says add from Directus.\u003C/p>\u003Cp>And I'm gonna click this one that says organize images. So these prompts basically allow us to add additional details, that gets replaced using variables. And then I'm just gonna say, please organize the assets in the needs organized folder. Sorry for the slow typing. So I hit add prompt, and basically, this has just generated this.\u003C/p>\u003Cp>It has added my prompt here that I gave it at the end, and we've got some instructions for it already. And we'll just hit go. So what is Claude going to do? It should pull the schema from Directus. It should look at the system prompt, and then it should analyze these files, actually.\u003C/p>\u003Cp>So it has the ability because of the ClaudeSonic model has vision capability. It can analyze these raw images and actually analyze the content. So you could see it here. It's making a request with the raw true. That's gonna download the file.\u003C/p>\u003Cp>It should analyze that. And now it should go in and update the metadata for each one of these images. Now somewhere, someone in Anthropic is screaming about all of the calls that are happening here, but this is truly awesome. Right? So we could see it is updating all the metadata for me.\u003C/p>\u003Cp>I haven't had to go through and classify these. Now moving forward, as I just refresh the screen here and we could see what it's done for us, I've got a full title, I've got a description, I've got tags for all of these. This is gonna be easy to find this content moving forward versus just a bunch of image dot JPEG or image dot PNG or random strings of characters inside our assets. Amazing. So this is just one workflow that is possible with the direct to content MCP.\u003C/p>\u003Cp>Stay tuned for more.\u003C/p>\u003Cp>Speaker 1: We want to take a moment towards the end of the changelog for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been three A huge thank you to Jonas for fixing logging of invalid URL in isurlallowed, to SunGroll for adding support for non array group claims in OpenID and OAuth2, and to ABDON for updating the extensions SDK to Rollup v4. Thank you again. You can see the specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of June, who kindly financially contribute to Directus' development.\u003C/p>\u003Cp>A huge thank you to Wayfan, Entle, Mike, Fergus, Omar, Marcus, Mission Control, Utomic, Steven, James, Nonlinear, Andreas, John, Jamiluddin, Birb, Adam, Jason, Yuya, Vincent, CK, Valentino, Jens, and Wayne. The money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that.\u003C/p>\u003Cp>Speaker 0: Alright. And that is everything we have for you this month. If you are still here, thank you so much for taking the time to join us. We really appreciate it. If you've got any feedback on anything you'd like to see or any questions you have, community.directors.io, and we'll hope to see you next month.\u003C/p>\u003Cp>Thanks so much for joining. Have a good one, everyone. Bye.\u003C/p>","Alright. Hello, everyone. Welcome to July's version of the changelog from Directus. I'm Beth, and I'm gonna be taking you through what we've got in store for you today. Whether you are joining us live or you're catching up to this later, hi. Hello. Thank you for joining us. Welcome. Welcome if you are new. Thanks for joining us again if you are returning. If If you are joining us live and you've got any questions, do pop them in the chat. And if you are on YouTube or anything else like that, we will catch up with them later on. But for now, I am gonna kick us off by starting with the product updates. Let's talk through some of the highlights for our most recent release, directors 11.9. There's some potential breaking changes to be aware of. We've added support for LDAP login and enhanced parameter consistency for refresh and logout commands. There's allowed overriding the mode in refresh and logout commands to be inline with login, and the login method now accepts a payload object instead of separate email and password parameters. We've added anonymous project ID for improved telemetry. We've also added backlink query parameter to exclude back relations when expanding queried fields. You can see the full release notes on GitHub. Alright. Something else that's new is collaborative editing. So we've got Bryant talking you through that next. It's officially time to stop, collaborate, and collaborate? Brian here from Directus. And today, super excited to show you collaborative editing, which has been one of the most requested features since I've been here at Directus. And it's big on the hit list. It's awesome. Let's take a look. So you could see I've got, two different browsers side by side, and I'm logged in, as myself over here and as, dramatic chipmunk over here on the right. And I'm just gonna open up one of my pages here, the home page. So I'm gonna start editing my home page. You know, maybe I wanna change the permalink. And, of course, I could see my own user avatar here, but, as dramatic chipmunk logs into this page, we could see now, I could see he is editing this, and, he's locked out of editing any fields that I'm working on. And likewise, on this side of it, I am locked out of editing any fields that he is working on. All these changes are happening in real time, and it does support relationships. So this is the best part. Right? Directus allows you to create relationships super easily, and then, you know, the relationships like many to any page builder are great for dynamic pages. So now I can work on a landing page collaboratively with my teammates. So you could see here any changes I make are reflected over here. And likewise, any changes you make are reflected there. Now that is collaborative editing. Super simple, super smooth. How do we actually enable this? This is an extension, so make sure you follow the instructions in the docs, download, and install the extension into your Directus instance. The next thing that you'll do is go to your settings. So I'm gonna go over here. Let's just go back to full screen. We're gonna go to the project settings. Go to the module bar. Once you have that extension installed, make sure that real time collaboration is checked, and that will add a new icon to the navigation. And you can enable this globally, which is the default. It's the easiest way to do it. It will work in the file library or in the user directory. Or if you prefer a more selective approach, maybe you've got some sensitive data that you don't want to, work collaboratively on, what you can do is go into the individual data model. So pick a collection and just search for the collaboration interface. You add that to the specific collection that you want, and then collaboration will only be enabled for that specific collection or collections that you enable it for. So that's it for collaborative editing. That's it for me. This thing is awesome. I hope you'll find it as awesome as I do. Kudos to our team and thank you for watching. Alright. And if you wanna hear more or you've got any questions, we have a post on community.directors.io from Matt with lots of other info and some links which I will drop in the chat as well. Speaking of the community platform, the next segment is a community hotline. And welcome back to the community hotline. I'm your host Brian Gillespie from Directus. Today, we are answering a question from Directus community member, Daryl Morley. Daryl, how are you, sir? Welcome to the community. Happy to have you. I'm gonna answer your question today in detail. Alright. So the question from Daryl. I'm integrating Directus with Lightspeed retail API. Not heard Lightspeed name in a long time. That's awesome though. Would like to use, for example, the category ID from Lightspeed as the primary key in my categories collection within Directus. Here's the flow I'm aiming for. One, a the first step, a user creates a new category from the Directus admin UI. A before create hook fires that's not actually what it's called in Directus, but I got you. It creates a category inside Lightspeed via their API. We receive the category ID back from Lightspeed, and it sets that ID as the primary key of the new Directus record. The issue I'm running into is if the ID field is not auto generated, Directus requires you to provide an ID. Yeah. You gotta have that primary key for sure. But I can't know the ID until I call the Lightspeed API inside the hook. Prevents me from using the Lightspeed category ID as a Directus primary key. I could potentially store Lightspeed ID in a separate external category ID field, also an option. But then I run into difficulties linking my items to categories as, the directus only supports relationships using the primary key. You could establish relationships on that that other field as well, but I totally understand where you're coming from with this. And Daryl's pleading. Because anyone successfully implemented a setup like this or found a clean workaround, keeps everything in sync. Alright. So we are going to dive into this, Daryl. We are gonna solve this problem together right now. Alright. So I've got a blank direct us instance. We're gonna go in and let's create a new collection. I use plurals. We're gonna call it categories. Now every collection has to have a primary key. Typically, I just leave this set to ID for simplicity's sake, and usually I go with a generated UUID. We automatically generate that. In this case, where we want that to come from a third party, we are going to use a manually entered string. Now optional fields, I usually add these a 100% of the time. Not gonna do that here. I'm just gonna click finish setup, and what we're gonna do is just hit name. Let's add one more field for the name of this category, and this is our categories. Right? So now the challenge is if I go in, and this is a new category, just as you said, if I try to save this using command s or just hitting the save button here, requires a value. Well, that sucks. That's not what I wanna do. So how do we fix this? There's two ways I can solve this. I'm gonna show you flows first, and then we'll talk about hooks. Underneath the hood, they use the same event system. But, one way to do this inside the studio without writing much code or creating a custom extension that you've got to bundle and deploy, you could just do this in a flow. And if the logic is simple enough, it's it's easy to maintain. So we're gonna call this create category is the name of this flow, cool, in external API. Now I'm not actually gonna use the light speed API here just to keep this high level, but, yeah, you'll you'll figure that part of it out. Got faith in you. Got confidence. Alright. So we can trigger these flows a variety of different ways. Well, the one we're looking for is event hook, and then we're immediately asked the type of event hook. So there's two, obviously, that's on the screen. There's filter, which is, they said we say blocking here because it blocks that event from actually performing. This is the one that we want because we get a chance to it runs before the item gets saved in the database or before the item gets updated. We'll talk about that in a moment. Actions happen after the event is settled, so after the category has been created. In this case, we want to intercept that category as it's being created and before it's saved into the database, and we're gonna alter the payload. So that's what we're doing here. The scope, we just want items create. Right? Updated items should already have an ID, and we don't wanna complicate this. The response body is going to be our altered payload with this. So this is the payload that we're gonna save to the database. Now you can choose between all data or the data of the last operation. In this case, I'm just gonna keep this simple and choose data of the last operation to remove as many potential issues. Alright. So now we've got our trigger. The next thing that we wanna do is call the external API. Now, I could go in and just choose webhook request URL. I'm gonna hit call external API here. This is our step. In this case, it's gonna be a post. And I've just set up, like, a a mock endpoint, from some online free service that when we send this request, it should just send us an ID back. Cool. Alright. And now the last step, you know, and probably, like, that stuff you're getting back from Lightspeed, you're gonna wanna transform that payload. There's two ways to do that. And let's just call this payload. Right? I could use the run script operation where I've got the full power of JavaScript. Now you can import anything from NPM or use any libraries here, but you you've got, you know, the standard JavaScript library available to you here, and you can run, you know, just basic little functions there. Actually, you don't have the standard JavaScript library. This runs in an isolate, but you got all the basic JavaScript stuff that you're gonna need to transform a payload. The other way to do this is via the transform payload operation, which basically just allows you to adjust what is gonna come out of this thing. And you'll see we're using mustache syntax here for a reason. Every operation in a flow appends its data to a key that you can then access. So there's two that are special, which are accountability and dot trigger. That's why they have or I'm sorry, dollar sign trigger. That's why they have that dollar sign in front of them. But the rest of them, we could just do like this. So it'll be call external API, that's the key, and then we're just gonna get the ID. Right? Cool. Hit save. This is our flow. Super complicated, super messy. No. It's not. It's easy. And then we're gonna go in, and now we're gonna create a new category. So we hit new category. And oh, undefined. That's not good. What is happening here? Call external API. That's my key. Did we get some records back? Okay. Yep. So that's the issue. Right? Now I incorrectly formatted this. The thing that we're looking for is dot data dot ID. Alright. Always gotta do a bit of troubleshooting. I was hoping I was just gonna one shot that without any AI assistance, but, hey, it happens. And I also saw that we're missing the name. So in this case, you know, I'm just going to call the name. So we'll do trigger dot payload dot name. I think that's gonna be correct. Now, again, this is probably where you might wanna use something like JavaScript. But we can see here in our trigger, we have a payload. We have a name for the payload. Awesome. Alright. So now, fingers crossed, this should work or it's gonna error out because we can't have two categories with undefined. This is new category. Hit save, and voila, we've got an ID that has come from the ether. Now the other approach to do this, you know, if you prefer to express your logic as code and you wanna, you know, check that into Git, what you can do is just build an extension that does the same thing. Right? How do I do that? Well, go to our extension docs. So just go to guides, go to extensions, go to quick start, copy this code. I'm just gonna open up my terminal. We are going to put this here, APX direct us extension latest, and we're just gonna write a custom hook. And I'm going to even cheat and just use something that I've got in, another project. Alright. Choose a name for the extension. External ID, maybe. Sounds good. Cool. We're gonna use TypeScript, auto installer dependencies, and now I've got this external ID extension. It actually needs to be in my extensions folder here inside Directus. So, let's just blow this whole thing up and do that. My Directus project CD extensions slash external ID. Why does that not work? CD extensions. What is my directory? Oh, somehow I'm inside Directus. I could do that. CD extensions, external ID. Okay. And if I open this up, it's just an index dot ts file whenever the item is created. Let's pull up just something from my clipboard. Where are you? Okay. Cool. So this is a pattern that I've used quite a bit before. We're just gonna call this categories. Right? And we're gonna erase nano ID. We don't really need that. Cool. And we'll say, what, fetch? We could do a fetch call in here. Alright. Constant ID. You know what? Let's just let's keep it simple. Nano ID. Cool. So what this does, right, we define this hook, and we'll go into we see this filter that's on items dot create, and then we're passing in the payload, our schema from the direct us. And, we've got our accountability object, which we're not using at all here. But then we've got this constant that says, okay. These collections have to have a public ID. And in this case, I could just change it to ID. And all we're doing here is updating the payload and returning the payload. Payload has no ID. Alright. I'm gonna hit NPM build. Directus CD extensions. External ID. Cool. There we go. PMPM build. Build my extension. I just wanna show you one way that can get this done. And then I've got my directus instance. We're gonna need to restart that bad boy. So we'll hit restart. It should pick up that new extension. And fingers crossed. If we go to extensions, we could see that extension. And then I can deactivate. Let's not delete it entirely. So we'll just deactivate this flow, change the status to inactive. Cool. Got it. And now if I do this again, say test category. Fingers crossed. I know this is not gonna work. Oh, it does work. There we go. Test category. I was gonna say, I don't think I have Nano ID in installed, but maybe we're using that somewhere inside Directus itself. Cool. There it is. Couple different ways to achieve it. Hope this answers your question. Daryl, my man, thanks for joining the community. Appreciate you. Keep the questions coming. Keep the feedback coming. We love it. I'll see you next time on the community hotline. Hey, guys. Brian here for Directus. And in this video, I'm gonna show you how to use the Directus Content MCP server to organize and manage all of your assets inside your CMS. Now, this is a huge problem for any CMS, all the way back to the before WordPress times. Right? We've got a bunch of images that somebody uploads. I'll just copy paste this one in. And to beat it all, I'm just gonna rename this one image dot JPEG. Right? We're gonna download a nice little bunny that we're gonna paste in here. So we'll throw our bunny in there. Cool. Got the bunny. And let's do one more, maybe some ice cream. My kids are into ice cream, so that's what we'll do. And, again, like, one of the other nice things about Directus, I can always import from a URL instead of a, actually, a file. So there we go, right? And here in lies the problem with every asset management inside of CMS is we end up with a bunch of stuff that makes no sense, has no metadata, basically impossible to search. So q, the direct as content MCP server, and Claude. So I am going to use my prompt here, and it says add from Directus. And I'm gonna click this one that says organize images. So these prompts basically allow us to add additional details, that gets replaced using variables. And then I'm just gonna say, please organize the assets in the needs organized folder. Sorry for the slow typing. So I hit add prompt, and basically, this has just generated this. It has added my prompt here that I gave it at the end, and we've got some instructions for it already. And we'll just hit go. So what is Claude going to do? It should pull the schema from Directus. It should look at the system prompt, and then it should analyze these files, actually. So it has the ability because of the ClaudeSonic model has vision capability. It can analyze these raw images and actually analyze the content. So you could see it here. It's making a request with the raw true. That's gonna download the file. It should analyze that. And now it should go in and update the metadata for each one of these images. Now somewhere, someone in Anthropic is screaming about all of the calls that are happening here, but this is truly awesome. Right? So we could see it is updating all the metadata for me. I haven't had to go through and classify these. Now moving forward, as I just refresh the screen here and we could see what it's done for us, I've got a full title, I've got a description, I've got tags for all of these. This is gonna be easy to find this content moving forward versus just a bunch of image dot JPEG or image dot PNG or random strings of characters inside our assets. Amazing. So this is just one workflow that is possible with the direct to content MCP. Stay tuned for more. We want to take a moment towards the end of the changelog for thanking our amazing community contributors who give their time to improve the director's project. Since last month, there have been three A huge thank you to Jonas for fixing logging of invalid URL in isurlallowed, to SunGroll for adding support for non array group claims in OpenID and OAuth2, and to ABDON for updating the extensions SDK to Rollup v4. Thank you again. You can see the specific pull requests inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of June, who kindly financially contribute to Directus' development. A huge thank you to Wayfan, Entle, Mike, Fergus, Omar, Marcus, Mission Control, Utomic, Steven, James, Nonlinear, Andreas, John, Jamiluddin, Birb, Adam, Jason, Yuya, Vincent, CK, Valentino, Jens, and Wayne. The money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. And that is everything we have for you this month. If you are still here, thank you so much for taking the time to join us. We really appreciate it. If you've got any feedback on anything you'd like to see or any questions you have, community.directors.io, and we'll hope to see you next month. Thanks so much for joining. Have a good one, everyone. Bye.","c5f71639-2dcd-4bb2-afb0-fbdd97bd9c22",[383,384],"0e958051-a92d-4102-b399-e2958fd1f67f","b0c26bb1-d654-4dd1-9240-fea0bc4187e5",[],{"id":139,"number":140,"show":122,"year":141,"episodes":387},[143,144,145,146,147,148,149,150],{"id":150,"slug":389,"vimeo_id":390,"description":339,"tile":391,"length":185,"resources":8,"people":8,"episode_number":392,"published":393,"title":394,"video_transcript_html":395,"video_transcript_text":396,"content":8,"seo":397,"status":130,"episode_people":398,"recommendations":402,"season":403},"september-2025","1121526894","0010da3d-a46b-4022-9f42-01cccc9d706c",13,"2025-09-26","September 2025","\u003Cp>Speaker 0: Hello everyone! I hope you're having a wonderful day. Welcome to September's version of the changelog. If you're new here I'm Beth and I'm gonna be taking you through what we've got in store for you for this month. If you are joining us live, do let us know along the way if you've got any questions.\u003C/p>\u003Cp>And if you are joining us later, there'll be multiple places that you can ask your questions. If you're on LinkedIn, if you're on YouTube, ask there. If you are finding this somewhere else, community.directors.i0 is the place to go in the meantime, and I'm kicking it off with what we have new with product. Hello, everyone. It's been a little while since we last had our product update here with us being away from the change log in August, so let's not waste any time and let's jump into what's been going on with Directus since we last spoke.\u003C/p>\u003Cp>For Directus 11.1, there's some potentially breaking changes. Firstly is snapshots behavior. We now exclude database only tables from snapshots, meaning tables not tracked in Directus collections. The second breaking change affects typescript extension developers. Services exposed to API extensions are now fully typed instead of any which means you might see new type errors when building extensions.\u003C/p>\u003Cp>Things like item service constructor now expect strict string types and methods like read one and read many expect specific types for primary keys. WYSIWYG adds through improvements. We've also added a code tool to the WYSIWYG text editor which gives you more flexibility when editing content plus various accessibility improvements for anchors iframes and labels. Flows updates. There's a new error operation in flows and we've added support for private key JWT auth method in the open id driver.\u003C/p>\u003Cp>Other notable updates. We've upgraded the extensions SDK with the latest versions of rollup and vite, though this does raise the minimum node. Js version to 20.19.0 plus the usual batch of bug fixes and optimizations throughout the platform. On to directus 11.11, which has some potential breaking changes around content versioning. However, since I'm also gonna be talking about directors 11.12 right now and next up, I think I'll leave talking about content versioning until it's the most up to date version.\u003C/p>\u003Cp>But if you are wanting more information about content versioning and how it affects 11.11 check out the breaking change docs on github. Within 11.11 we improved the wysiwyg editor with proper link styling and fixed some code mode issues. We also upgraded esbuild, write, and updated nodemailer to AWS sesv2. And we added a new field to conditions for clearing hidden fields on save. Short and sweet, moving on to 11.12.\u003C/p>\u003Cp>For directors 11.12, there's some potentially breaking changes related to content versioning. We fixed how user created, user updated, date created, and date updated values work in content versioning. These fields now correctly reflect the actual user and timestamp of creation or last update rather than the user and date of promotion. Also requesting a non existent version will now return a forbidden error. Beyond those potentially breaking changes we've got some pretty significant improvements for content versioning.\u003C/p>\u003Cp>We've completely rewritten how content versioning handles relational data and query parameters. This was a complex undertaking but the result is a much more robust and predictable versioning system. Content versions now support all the same query parameters as regular content. Filters, sorting, field selection, and aggregation all work just like you'd expect. We've also got proper relational data merging so versioned content with relationships now merges correctly giving you accurate representation of your content at any point in time.\u003C/p>\u003Cp>And the new implementation is significantly faster when working with complex relational structures. This is just one step towards improving our content versioning experience. We have lots more planned so stay tuned. Right to left language support improvements. We've also expanded our studio accessibility with some important improvements for localization.\u003C/p>\u003Cp>Context menus now properly align and display for RTL languages and we've got better handling of directional layouts across the data studio interface. These improvements make directors much more accessible for teams working in RTL languages including Arabic, Hebrew, Farsi, and Urdu just to name a few. MCP support and technical improvements. On the technical side, we've also got some MCP support rolling out. This is still in beta so we'll have much more to share on that front soon.\u003C/p>\u003Cp>We fixed OAuth flow to allow for 2FA setup for users without passwords, where previously if you did not have a password linked to your account you couldn't set up 2FA, now you can. Bug fixes note: there are also a bunch of smaller improvements and bug fixes. If you'd like to see the full release notes they're available on GitHub. And that's it for 11/2012. As always let us know if you've got any questions the best place to do that is community.directus.io.\u003C/p>\u003Cp>We also just generally love hearing about how these updates improve your work with Directus. Thank you so much for taking the time and we'll catch you on the next release. Alright and next up we have both Brian and Ryke getting together to talk about the marketplace updates.\u003C/p>\u003Cp>Speaker 1: Thanks for the intro, Beth. Ryke and I are here, and we're both super excited to announce the public marketplace. Ryke, what are we talking about when we say public marketplace?\u003C/p>\u003Cp>Speaker 2: We're talking about the marketplace on the website this time. So if you recall, the marketplace started life as internal tooling to solve, you know, extension distribution. How do people get their hands on extensions? Both for the ones that we built, but also the ones that other developers like to share with our large user base. So we've had the marketplace in the studio of Directus itself for a little while.\u003C/p>\u003Cp>And I'm happy to announce that starting today, that is no longer in beta as well. But we're here to announce another great update to that marketplace, which is the public marketplace. So the public marketplace is a version of the marketplace. You see the same extensions available on our website. So the rest of the internet can explore it as well.\u003C/p>\u003Cp>Brian, you wanna give a little demo of what that looks like?\u003C/p>\u003Cp>Speaker 1: Absolutely. Thank you, sir. Alright. So the public marketplace is all about solving discoverability. Unless you had a Directus instance, you were unable to view the amazing extensions that our community has put together.\u003C/p>\u003Cp>That changes today. So there are three components to the marketplace. You can find it at directus.io/extensions, and you could see all the different extensions that are available to install inside your directus instance. We've got filtering capabilities, so you could sort by or filter by the different types of extensions. Super easy.\u003C/p>\u003Cp>We can search for extensions. This is typo tolerant search as well. So if you're like me, quick with the the fingers, this is, a great search experience. Some of the new capabilities that we have in the public marketplace are the ability to see trending extensions over the past week or the past thirty days. So you could see who's installing the most popular extensions over a certain period of time.\u003C/p>\u003Cp>When you click into a given extension, you'll see a full overview of the extension. You can see all the statistics, which versions of Directus it works with, how many total downloads, even report issues for that. And then once you're ready to install that extension, all you have to do is click install extension, enter in your Directus URL, like so, and hit install extension, and that will take you right inside your Directus instance to that extension ready for you to install. Alright. Other components to the marketplace include integrations.\u003C/p>\u003Cp>These are basically roll ups of the different extensions. So if you are looking to see if Directus integrates with HubSpot, for instance, we've got the HubSpot integration page where you can see all the different extensions that, interface with HubSpot, as well as general overviews. So we can quickly see our AI extensions or integrations here. And if we're looking at OpenAI, there's a lot of different extensions that use OpenAI, and you can quickly find all of them. Last but not least, we have templates.\u003C/p>\u003Cp>So templates are starters for your next Directus project. We have some of our own starters as well as community contributed starters like the adventure business toolkit by Mimi Paul. And here you can get started with a fully baked Directus project, ready to customize in no time at all. That's it for the demo of the public marketplace. Reich, any last words before we kick it back over to Beth?\u003C/p>\u003Cp>Speaker 2: Yeah. This is awesome, Brian. Thank you very much. And another another step in in sort of our extension story and how to customize Directus. Where'd you say people could find this again?\u003C/p>\u003Cp>Speaker 1: It is directus.io/extensions. Awesome.\u003C/p>\u003Cp>Speaker 2: Directus.io/extensions. And with that, back to you, Beth.\u003C/p>\u003Cp>Speaker 0: Alright. And in very exciting news, this is not the last of Ryke and Brian that you will see in this show. So for now, I'm gonna send it over to one of my I say this every single time. It's my favorite segment that we do. It is the community showcase.\u003C/p>\u003Cp>And for the very first time, we have someone coming back that has previously been on this show. So we have Josh with the note taking project.\u003C/p>\u003Cp>Speaker 3: Today, I would like to show you how to supercharge AI batch processing using Directus MCP with a self learning note taking workflow. Batch processing is really effective for, for situations where you need raw speed, but it kinda breaks down when you need to make creative decisions on individual items and on the batch as a whole. You can't really do that without a human element. AI models, I found, are great for those sorts of tasks, but they break down when you give them a whole bunch of data. And they also struggle with finding the right information to pull in to make those creative decisions.\u003C/p>\u003Cp>So the solution I found is to teach AI to take notes. By implementing a workflow that lets Directus MCP take notes directly on whatever it's working on, we gain the ability to do things like long running task tracking because the model can pick up where it left off and and, start fresh with a new context window. And we also get things like self improving database access. You take a note on all the different things that you ran into difficulty with and what you did to solve them and how it worked out. And it speeds up future runs because it can read that note and go, okay.\u003C/p>\u003Cp>So don't do this. Do this, and I'll be able to just continue with the task I was working on. And then by letting it take notes, we can consolidate a whole bunch of data that was stored in the database. Say, for example, you wanted to pull out all of the aliases for your articles that are related to rabbits and you also want the ID for each one. Well, you can just dump that in a note and analyze it in future runs.\u003C/p>\u003Cp>So in our case, Directus is the knowledge backbone. Every note is just a key value pair. I'll go ahead and show you the notes table here. It's a very simple setup. We have a key, which is just a string, and this is what the AI model uses to kind of categorize what the different notes are about.\u003C/p>\u003Cp>And we have the value, and that's just a big markdown, field. It's a very simple setup, but it's surprisingly powerful. By using semantic keys and explicit instructions on how to record and review notes, we give the AI models a very quick and effective way to find the context they need. So this database has a problem. We have a whole bunch of articles.\u003C/p>\u003Cp>We have a 124 articles, and the titles don't really make any sense. Oh, the bodies are in Latin. And I I can't work with this. So I've created a prompt for Claude to read the article titles and come up with a concept proposal for each one. What could this article actually be about?\u003C/p>\u003Cp>So let's look at the system prompt here. You can see that there's two things that it's informing the AI model about. That there's an AI notes table in the rough structure of that table and that it needs to read and record its database insights, especially how it solved problems it ran into and just update that note on every run. This gives it the self learning ability we were talking about earlier. It's able to figure out what it ran into last time and fix it on the next run.\u003C/p>\u003Cp>Now back to the task. I've told the AI model it's a skilled content analyst and writer. We have a huge collection of articles. All the bodies are full of nonsense, all that. Alright.\u003C/p>\u003Cp>So its job is to record the concepts that it comes up with in an article concepts note. It's not sure what to do with an article based on the title. Be creative. Find a wacky concept. Then we have some very specific instructions.\u003C/p>\u003Cp>We say always read the template and template article concepts, this is a note, to determine how to structure your output. Always create a new article concepts note for each run. Always give it the exact name. Always process 30 articles. Always review the last note you created before starting to make sure you don't duplicate any work.\u003C/p>\u003Cp>This template lets us make sure that we get consistent output on every run. Alright. Let's go ahead and run this a few times and see what its output looks like. I turn on auto refresh, and then I'm gonna go into Claude, add a prompt from Directus, and examine articles and propose concepts. If you want to know how to use this feature, go ahead and take a look at the Directus MCP documentation, and then we're just going to send it.\u003C/p>\u003Cp>Now, one of the fun things you can do with read and write access to Directus is if the model makes a mistake, you can ask it to update the prompt to fix its mistake in future runs. Article concepts. It has identified directly that just about every article appears to be lorem ipsum gibberish and occasional test content. Alright. So came up with a bunch of different articles on a bunch of different ideas.\u003C/p>\u003Cp>In a bit, we're gonna use this to actually write all these different article concepts. But for now, I just wanna keep going through the batch process to show you how it's able to pick up where it left off and continue. On this run, if you notice, it actually picked up that it needed to look up the translations and didn't have to figure that out from the schema this time. Alright. It is a new day.\u003C/p>\u003Cp>My cloud usage limits have reset, and we are ready to continue with step two, which is generating the articles based on the concepts that we've put together. All of the, article concepts have now been saved in these, concept notes. They take the article title. They try to figure out what on earth, the article should be about and propose a concept. So now we have the next step of the process, which is to generate a actual article for each of the articles we generate concepts on in both English and German.\u003C/p>\u003Cp>And we're gonna go in batches of 10 and see how well that works. We'll take this prompt and it should automatically read over all of our article concept notes and start filling in articles for those. Let's go. So we're going to use the turn concepts in the full fledged articles prompt. That's going to go and read through all of our article concept notes and start filling in those articles, and I'll show you those articles as it writes them.\u003C/p>\u003Cp>I have no idea if these articles are gonna make any sense. This is gonna be fun. I'm having fun reading through these articles. I have no idea how helpful any of this is, but it at least sounds very convincing. Now, the key advantage to this approach is that if we were generating concepts and writing articles at the same time, we'd have to use much smaller batches.\u003C/p>\u003Cp>But because we split the process into two steps, we've saved a ton of context window, and we're able to work in larger batches. And as a bonus, we can do multiple things with those article summaries, while we're working on generating those articles from those summaries. Now this isn't the most efficient workflow for generating articles. There's way better workflows for that. We're just demonstrating this concept.\u003C/p>\u003Cp>But a nice thing about this approach is that you can perform multiple tasks at the same time. For example, while we were working on these articles, we could also be working on something completely different using the notes that we're generating the articles from. I have this prompt here, categorize article concepts, which will allow Claude to suggest an article taxonomy based on the summaries it's already generated. It'll just read all the article concept notes and create a new note suggesting that new taxonomy. I like the way it describes these articles as a fascinating collection of technical and business focused article concepts with creative jargon filled titles that have been transformed into practical valuable content ideas.\u003C/p>\u003Cp>I'm not quite sure I'd be so positive about it, but Nate gets the idea across. Alright. Let's take a look at the categories that are generated and the opportunities that identified. So here's some content gaps, AI and ethics, sustainable technology operations, human centered digital transformation, all sorts of other different things. And here are some of the categories that's come up with.\u003C/p>\u003Cp>System architecture, it's put a bunch of different articles in that category, Ecommerce, digital business, data management and analytics, user experience and interface design, business operations or business optimization management, automation and AI systems, project management and collaboration. So So it's basically taken all of those articles that we put together and categorized them according to common themes in those articles. This could be really useful if you have an existing content collection that you're trying to build a new categorization system for. And what's great is you could just take this and create another prompt to actually apply that taxonomy to articles, and create categories and all sorts of different things for that in Directus. So by the end of this run, here's what the AI model has built: concept proposals for every article in our database, full body content for many of those articles in English and German, a whole new content categorization system for the articles it wrote, progress logs so that it doesn't lose its place, and database access hints that documents how the challenges were solved so that on future runs, it could do even better.\u003C/p>\u003Cp>Instead of treating AI like a disposable worker or one that can infinitely stuff and stuff and stuff and work on something until it gets all confused, we're treating it like a teammate that tracks and follows up on what it's done across multiple days, multiple runs, starting with a clean slate on each task and only pulling in the information that it needs. We turned a human in the loop batch processing task into an AI creative workflow by splitting it into discrete steps and letting it kind of pick up where it left off. We gave the model a way to track progress. We built templates to make the results more consistent and reusable, and we recorded information about the database to help the AI model get smarter over time. I've had a ton of fun nailing down this workflow and testing it on all sorts of tasks.\u003C/p>\u003Cp>For my work, we're actually using it to do things similar to this where we're analyzing a huge amount of content and trying to figure out how to organize and categorize and and do all sorts of things, and it's it's doing really well. The ability to take notes, record what it's done, and just kind of start over and create its own context has been incredibly helpful with turning a workflow that works really well for one or two articles into something that works well across thousands. So thank you for your time. I really look forward to seeing what everyone does with Directus and Directus MCP going forward, especially as Directus MCP evolves, AI models get more capable, and just the overall\u003C/p>\u003Cp>Speaker 0: core gets stronger. The future is gonna be fun. Thank you once again to Josh for sending in that amazing showcase. This actually started because it was a post on the community forum, so do if you have been inspired and you've got any questions for Josh, he is around at community.directors.io. And, speaking of the MCP and AI, I gave a bit of a challenge to Bryant and Reich with an AI update.\u003C/p>\u003Cp>I was like, please can we have an AI update for the change log? And I gave them no more context, and they delivered. So here you have an AI update from Brian and Reich.\u003C/p>\u003Cp>Speaker 1: Alright. And we're back. So in this segment, Beth has challenged Wrike and I to have a conversation on AI and Directus. Where that conversation is gonna go, let's see. Right?\u003C/p>\u003Cp>But Wrike, you know, what's what is our take on AI at Directus? We'll just What is\u003C/p>\u003Cp>Speaker 2: our take? That is a very six hour long answer in a five minute segment. So let's let's start\u003C/p>\u003Cp>Speaker 0: at the\u003C/p>\u003Cp>Speaker 2: beginning. Well, as you know, most everybody else in the industry, we've been using AI a lot internally to try to figure out and get a feel for what works, what doesn't, where are the opportunities, where are the challenges that to then figure out what do we want to do with AI in the context of Directus. Right? So the way we see it right now, there's basically two major touch points for artificial intelligence in the world of Directus. It is one, what can external tools do with Directus on the user's behalf?\u003C/p>\u003Cp>So think about a a cloud desktop or a JetGPT. And secondly, what can we do using LLM technology within the studio and API to enrich the user experience of Directus itself? So Brian, you wanna start with the with the first?\u003C/p>\u003Cp>Speaker 1: Yes. Absolutely. So what can external LLMs do with the data inside Directus? Right? We've already previously shipped a local MCP server, and we've, we've gotten a ton of great feedback with that.\u003C/p>\u003Cp>Now, what we are currently in development with is an MCP server inside Directus. So you'll be able to connect remotely to your Directus instance and use the tools that are available to add content, update blog posts, build landing pages. But more than that, you will be able to edit your actual data models. Your update, all of your schema, add new fields, improve, the, the user experience for your content editors. So that really comes together nicely as a complete picture.\u003C/p>\u003Cp>But, on the other side of the coin, maybe you wanna talk about the the second piece. Right? What we plan to do with AI inside Direct Us.\u003C/p>\u003Cp>Speaker 2: On the internal side, we as a team really strongly believe in shipping features that add actual value. So we have seen, you know, some uses before, I I won't name names, that are a little gimmicky and not really customer friendly or actually useful in a day to day. So right now we're we have some solid plans and some early stuff in flight, that add some real value into Direct to Studio. Both using generative AI for generating and helping, optimize content and other data, but also in a way to sort of help some of the more click ops heavy configuration pieces of Directus itself. Right?\u003C/p>\u003Cp>So think about things like, flows or data model and things like that. On the first part though, I know we're flipping back and forth a little bit, but both both tied together. On the MCP front, one thing you mentioned there, Brian, is like it can do data modeling, it can do, you know, data access. Is is that just a a free for all agent that is just gonna go rogue on my database? Or how do we how do we protect that?\u003C/p>\u003Cp>Speaker 1: I I'm glad you mentioned that because that is one of the scariest pieces of AI in my mind right now. There's other MCP servers where you can connect directly to a Postgres database and basically run any raw SQL queries against that. So you and I both, probably break out in a sweat when we talk about something like that. The MCP server inside Directus is beautiful because it is scoped by the permissions that we make, available through the API. So any, user connecting via the MCP, you can only perform the different operations that that user has access to, which means, improved security compared to the, maybe some other MCP implementations.\u003C/p>\u003Cp>And also we prevent you from taking super destructive actions that, could, result in a lot of data loss or just general heartache for both content editors and developers.\u003C/p>\u003Cp>Speaker 2: Phew. Thank God. Yeah. Because to your point that, that does make me break out in, in sweat. And the same goes for for the work that we're doing with LMS within the studio at the moment.\u003C/p>\u003Cp>Right? I think it's important to mention. So where, in in our testing with the MCP server, we find, you know, a lot of the LMS as of September 2025 because the stuff change all the time. It is oftentimes a little trial and error. Right?\u003C/p>\u003Cp>You see an LOM tries something, it fails, it gets an error, tries again, it fails, it tries again, and it succeeds, and sometimes it gets there, and sometimes it doesn't. We spend quite a lot of time, really optimizing the system prompts to get that reliability up and up and up and it's in a spot where I'm like, this is actually fairly reliable. Like, as in as reliable as we can get it from an L. M. But by by integrating the L.\u003C/p>\u003Cp>M. Technology straight into the studio piece of it, we have the opportunity to do an extra layer of validation as well. Which means that we can make sure that we know what the l l m is about to do or what it wants to do and we can allow the user to validate and verify that before actually running some of these pieces. You know, akin to what you might have seen in a in a cursor or Copilot right before it runs terminal commands, things like that. So anyways, we'll we'll leave it at that because I don't wanna, you know, tease too much before before it's ready for the prime time.\u003C/p>\u003Cp>But we have some very exciting stuff coming. So I believe the MCP server, will ship somewhere in this month. We're sort of in the final testing phases. If you're interested, please do check out the PR if this goes out before it's merged. Otherwise, you'll see it on the main branch and in the upcoming release.\u003C/p>\u003Cp>For the internal AI piece, like I said, it's very much research and development early testing. Just feel free to ping me anywhere on the internet if you're interested to sort of learn more about that. We're always happy to chat and learn from, you know, what people actually wanna use this for. But expect more on that in the near future. So stay tuned for that.\u003C/p>\u003Cp>And with that, back again to Beth.\u003C/p>\u003Cp>Speaker 0: Alrighty thank you once again to Brian and Reich especially since I gave them not much context I was like I'm just gonna bring you into a recording studio and we're gonna talk about some things. So that was really helpful and I hope you're all excited if again if you've got any questions, do let us know. We're now gonna get over to Brian with a section for the community hotline.\u003C/p>\u003Cp>Speaker 1: And we're back with another episode of the community hotline. Welcome. Today, we have Wylus, Wylies. Sorry if I get the name wrong. Welcome to the community.\u003C/p>\u003Cp>Glad to have you, friend. Alright. So our question today, is building a front end CMS within Directus possible? So we'll tackle that in a moment. Let's read the rest of this.\u003C/p>\u003Cp>Good day, gurus. I'm looking for a powerful tool to support the following. SaaS, hold hosting multiple tenant within one project, creating pages if possible, but how could I render it within Directus? I saw tutorials, but only using Directus as a back end. How can we make this work potentially?\u003C/p>\u003Cp>Alright. So first and foremost, right, Directus is set up to be a headless CMS and back end. So that paradigm is very important to understand. WordPress is, has a headless option, but it's ideally a monolithic kind of solution where you've got your CMS and you've got your front end and the templating and all that is mixed together, whereas Directus is headless and that's the way it's designed. So you can, send that data to multiple sources.\u003C/p>\u003Cp>Maybe you've got a a front end, maybe you've got a mobile application, maybe you've got a kiosk or a display that you need to send data to or fetch data, from a back end. Directus is great for that. When it comes to building a front end CMS within Directus, basically, you're talking about the Directus App Studio. Right? I can not only just add my own team members to this, but I could potentially create a multi tenant CMS out of the Data Studio itself.\u003C/p>\u003Cp>So, if you take a look at our CMS starter, this is available, you know, through the website. If you go to directives.io, you hit this command line, or this script here. Just pop this into your terminal, select the CMS option, or if you go to our cloud, log in, you spin up a new project inside cloud, just pick the CMS template and you can get access to what I'm gonna show you here today. Right? So this comes out of the box.\u003C/p>\u003Cp>This is a a CMS. It's exactly what you would expect out of a CMS. We have pages, we have posts, etcetera. Now if I wanted to make this multi tenant, how would I go about it? Well, first, I would create a tenant collection.\u003C/p>\u003Cp>Maybe that's sites or, properties or whatever we wanna call it. And then for each collection within this, I add a relationship, many to one, back to that site's collection, back to that tenant collection. And then within our access policies, you've got everything you need to basically scope access down. So you can filter based on the site, so that one tenant cannot read the, data from another. Now, there's an specific episode of 100 apps, one hundred hours where we cover this exact thing.\u003C/p>\u003Cp>So just look for multi site. That mission is season three episode two. You can follow right along with this and see how to set up a multi tenant CMS using Directus. Now to your other question. Right?\u003C/p>\u003Cp>How can I create pages or render within Directus? Now Directus itself is extremely flexible, and this is where our extensions come into play. And a good example of that, if we just go to directus.io and we look at our sandbox demo, there's a little extra module in here that is not, baked into directus core. This is just an extension that we built to give you a welcome page that does get rendered inside Directus. Now this is coming from a separate Directus instance, but again, all of Directus is modular and extensible.\u003C/p>\u003Cp>So this is actually a module extension. But if we just go to our docs, we look for our guides, we go to the extensions section, you can learn all about extensions. So you can customize the way that you interact with data inside the forms. Those are interfaces. You can control the way that data is displayed in the different layouts throughout the studio.\u003C/p>\u003Cp>That is a display. You have layouts themselves so you can control the listing of these items. You know, I think tables or kanban, views or maps, whatever. We can add panels to the dashboards and kind of the overall level where you've got total control over what gets rendered on the page, you have a module. So if you want flexibility on how things are rendered inside Directus, Maybe you wanna add some extra pages to it or you just want something, a blank canvas where you could totally experiment with whatever you want.\u003C/p>\u003Cp>Custom modules are what you're looking at. So, with that in mind, I hope that is enough to answer your question. Wireless. Wireless. Sorry.\u003C/p>\u003Cp>Again, I hate if I get it wrong. But that's it for this episode of Community Hopeline. If you want me to answer one of your questions on the next change log or or on the next community hotline, make sure you hop into the Directus community, community.directus.io, and I'll see you around.\u003C/p>\u003Cp>Speaker 0: We want to take a moment towards the end of the changelog for thanking our community contributors who give their time to improve the director's project. Since last changelog, there have been 11 contributors. Thank you to Josh for fixing require selection check for manual trigger flows, Klayvo for adding a message property to the SDK error object, Amos for removing duplicate code in fields read all, Gerard for fixing a bug that was preventing translations from displaying in the calendar layout, Danton for fixing a bug that prevented pop ups from working in the WYSIWYG interface when opened in a drawer, Hughes for adding WebSocket authenticate filter hook, Abdullah for fixing the code tool to the WYSIWYG text editor and for fixing links in WYSIWYG missing underline and pointer cursor styling, Matt for adding TypeScript support for services within the extension context and for fixing an issue for empty states not being centered in RTL languages, Tim for standardizing batch mode for raw group fields, Gloria for enabling text selection in the studio, studio, Jens for adding the ability to override the email from property. Thank you again to everyone mentioned. You can see their specific full request inside of the full release notes on GitHub.\u003C/p>\u003Cp>Lastly, we also want to take the time to thank our GitHub Sponsors of July and August who financially contribute to Directus' development. A huge thank you to Weifan, Jens, Mike, Fergus, Omar, Marcus, Mission Control, Utomic, Steven, James, Nonlinear, Andreas, John, Wayne, Burb, Adam, Jason, Yuya, Vincent, c k, Valentino, and Hadi. The money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright.\u003C/p>\u003Cp>And that is it for the change log of September 13. Thank you if you are still with us and you've made it to the end. You're my favorite people. No matter whether you are new to this changelog or you've been returning each time, we hope to see you again. As we've said multiple times within this changelog, if you do have any questions, let us know.\u003C/p>\u003Cp>And, yeah, that's it. Have a great rest of your day, your week, and your month, and we hope to see you really soon. Have a good one, everyone. Take care. Bye.\u003C/p>","Hello everyone! I hope you're having a wonderful day. Welcome to September's version of the changelog. If you're new here I'm Beth and I'm gonna be taking you through what we've got in store for you for this month. If you are joining us live, do let us know along the way if you've got any questions. And if you are joining us later, there'll be multiple places that you can ask your questions. If you're on LinkedIn, if you're on YouTube, ask there. If you are finding this somewhere else, community.directus.io is the place to go in the meantime, and I'm kicking it off with what we have new with product. Hello, everyone. It's been a little while since we last had our product update here with us being away from the change log in August, so let's not waste any time and let's jump into what's been going on with Directus since we last spoke. For Directus 11.1, there's some potentially breaking changes. Firstly is snapshots behavior. We now exclude database only tables from snapshots, meaning tables not tracked in Directus collections. The second breaking change affects typescript extension developers. Services exposed to API extensions are now fully typed instead of any which means you might see new type errors when building extensions. Things like item service constructor now expect strict string types and methods like read one and read many expect specific types for primary keys. WYSIWYG adds through improvements. We've also added a code tool to the WYSIWYG text editor which gives you more flexibility when editing content plus various accessibility improvements for anchors iframes and labels. Flows updates. There's a new error operation in flows and we've added support for private key JWT auth method in the open id driver. Other notable updates. We've upgraded the extensions SDK with the latest versions of rollup and vite, though this does raise the minimum node. Js version to 20.19.0 plus the usual batch of bug fixes and optimizations throughout the platform. On to directus 11.11, which has some potential breaking changes around content versioning. However, since I'm also gonna be talking about directors 11.12 right now and next up, I think I'll leave talking about content versioning until it's the most up to date version. But if you are wanting more information about content versioning and how it affects 11.11 check out the breaking change docs on github. Within 11.11 we improved the wysiwyg editor with proper link styling and fixed some code mode issues. We also upgraded esbuild, write, and updated nodemailer to AWS sesv2. And we added a new field to conditions for clearing hidden fields on save. Short and sweet, moving on to 11.12. For directors 11.12, there's some potentially breaking changes related to content versioning. We fixed how user created, user updated, date created, and date updated values work in content versioning. These fields now correctly reflect the actual user and timestamp of creation or last update rather than the user and date of promotion. Also requesting a non existent version will now return a forbidden error. Beyond those potentially breaking changes we've got some pretty significant improvements for content versioning. We've completely rewritten how content versioning handles relational data and query parameters. This was a complex undertaking but the result is a much more robust and predictable versioning system. Content versions now support all the same query parameters as regular content. Filters, sorting, field selection, and aggregation all work just like you'd expect. We've also got proper relational data merging so versioned content with relationships now merges correctly giving you accurate representation of your content at any point in time. And the new implementation is significantly faster when working with complex relational structures. This is just one step towards improving our content versioning experience. We have lots more planned so stay tuned. Right to left language support improvements. We've also expanded our studio accessibility with some important improvements for localization. Context menus now properly align and display for RTL languages and we've got better handling of directional layouts across the data studio interface. These improvements make directors much more accessible for teams working in RTL languages including Arabic, Hebrew, Farsi, and Urdu just to name a few. MCP support and technical improvements. On the technical side, we've also got some MCP support rolling out. This is still in beta so we'll have much more to share on that front soon. We fixed OAuth flow to allow for 2FA setup for users without passwords, where previously if you did not have a password linked to your account you couldn't set up 2FA, now you can. Bug fixes note: there are also a bunch of smaller improvements and bug fixes. If you'd like to see the full release notes they're available on GitHub. And that's it for 11/2012. As always let us know if you've got any questions the best place to do that is community.directus.io. We also just generally love hearing about how these updates improve your work with Directus. Thank you so much for taking the time and we'll catch you on the next release. Alright and next up we have both Brian and Ryke getting together to talk about the marketplace updates. Thanks for the intro, Beth. Ryke and I are here, and we're both super excited to announce the public marketplace. Ryke, what are we talking about when we say public marketplace? We're talking about the marketplace on the website this time. So if you recall, the marketplace started life as internal tooling to solve, you know, extension distribution. How do people get their hands on extensions? Both for the ones that we built, but also the ones that other developers like to share with our large user base. So we've had the marketplace in the studio of Directus itself for a little while. And I'm happy to announce that starting today, that is no longer in beta as well. But we're here to announce another great update to that marketplace, which is the public marketplace. So the public marketplace is a version of the marketplace. You see the same extensions available on our website. So the rest of the internet can explore it as well. Brian, you wanna give a little demo of what that looks like? Absolutely. Thank you, sir. Alright. So the public marketplace is all about solving discoverability. Unless you had a Directus instance, you were unable to view the amazing extensions that our community has put together. That changes today. So there are three components to the marketplace. You can find it at directus.io/extensions, and you could see all the different extensions that are available to install inside your directus instance. We've got filtering capabilities, so you could sort by or filter by the different types of extensions. Super easy. We can search for extensions. This is typo tolerant search as well. So if you're like me, quick with the the fingers, this is, a great search experience. Some of the new capabilities that we have in the public marketplace are the ability to see trending extensions over the past week or the past thirty days. So you could see who's installing the most popular extensions over a certain period of time. When you click into a given extension, you'll see a full overview of the extension. You can see all the statistics, which versions of Directus it works with, how many total downloads, even report issues for that. And then once you're ready to install that extension, all you have to do is click install extension, enter in your Directus URL, like so, and hit install extension, and that will take you right inside your Directus instance to that extension ready for you to install. Alright. Other components to the marketplace include integrations. These are basically roll ups of the different extensions. So if you are looking to see if Directus integrates with HubSpot, for instance, we've got the HubSpot integration page where you can see all the different extensions that, interface with HubSpot, as well as general overviews. So we can quickly see our AI extensions or integrations here. And if we're looking at OpenAI, there's a lot of different extensions that use OpenAI, and you can quickly find all of them. Last but not least, we have templates. So templates are starters for your next Directus project. We have some of our own starters as well as community contributed starters like the adventure business toolkit by Mimi Paul. And here you can get started with a fully baked Directus project, ready to customize in no time at all. That's it for the demo of the public marketplace. Reich, any last words before we kick it back over to Beth? Yeah. This is awesome, Brian. Thank you very much. And another another step in in sort of our extension story and how to customize Directus. Where'd you say people could find this again? It is directus.io/extensions. Awesome. Directus.io/extensions. And with that, back to you, Beth. Alright. And in very exciting news, this is not the last of Ryke and Brian that you will see in this show. So for now, I'm gonna send it over to one of my I say this every single time. It's my favorite segment that we do. It is the community showcase. And for the very first time, we have someone coming back that has previously been on this show. So we have Josh with the note taking project. Today, I would like to show you how to supercharge AI batch processing using Directus MCP with a self learning note taking workflow. Batch processing is really effective for, for situations where you need raw speed, but it kinda breaks down when you need to make creative decisions on individual items and on the batch as a whole. You can't really do that without a human element. AI models, I found, are great for those sorts of tasks, but they break down when you give them a whole bunch of data. And they also struggle with finding the right information to pull in to make those creative decisions. So the solution I found is to teach AI to take notes. By implementing a workflow that lets Directus MCP take notes directly on whatever it's working on, we gain the ability to do things like long running task tracking because the model can pick up where it left off and and, start fresh with a new context window. And we also get things like self improving database access. You take a note on all the different things that you ran into difficulty with and what you did to solve them and how it worked out. And it speeds up future runs because it can read that note and go, okay. So don't do this. Do this, and I'll be able to just continue with the task I was working on. And then by letting it take notes, we can consolidate a whole bunch of data that was stored in the database. Say, for example, you wanted to pull out all of the aliases for your articles that are related to rabbits and you also want the ID for each one. Well, you can just dump that in a note and analyze it in future runs. So in our case, Directus is the knowledge backbone. Every note is just a key value pair. I'll go ahead and show you the notes table here. It's a very simple setup. We have a key, which is just a string, and this is what the AI model uses to kind of categorize what the different notes are about. And we have the value, and that's just a big markdown, field. It's a very simple setup, but it's surprisingly powerful. By using semantic keys and explicit instructions on how to record and review notes, we give the AI models a very quick and effective way to find the context they need. So this database has a problem. We have a whole bunch of articles. We have a 124 articles, and the titles don't really make any sense. Oh, the bodies are in Latin. And I I can't work with this. So I've created a prompt for Claude to read the article titles and come up with a concept proposal for each one. What could this article actually be about? So let's look at the system prompt here. You can see that there's two things that it's informing the AI model about. That there's an AI notes table in the rough structure of that table and that it needs to read and record its database insights, especially how it solved problems it ran into and just update that note on every run. This gives it the self learning ability we were talking about earlier. It's able to figure out what it ran into last time and fix it on the next run. Now back to the task. I've told the AI model it's a skilled content analyst and writer. We have a huge collection of articles. All the bodies are full of nonsense, all that. Alright. So its job is to record the concepts that it comes up with in an article concepts note. It's not sure what to do with an article based on the title. Be creative. Find a wacky concept. Then we have some very specific instructions. We say always read the template and template article concepts, this is a note, to determine how to structure your output. Always create a new article concepts note for each run. Always give it the exact name. Always process 30 articles. Always review the last note you created before starting to make sure you don't duplicate any work. This template lets us make sure that we get consistent output on every run. Alright. Let's go ahead and run this a few times and see what its output looks like. I turn on auto refresh, and then I'm gonna go into Claude, add a prompt from Directus, and examine articles and propose concepts. If you want to know how to use this feature, go ahead and take a look at the Directus MCP documentation, and then we're just going to send it. Now, one of the fun things you can do with read and write access to Directus is if the model makes a mistake, you can ask it to update the prompt to fix its mistake in future runs. Article concepts. It has identified directly that just about every article appears to be lorem ipsum gibberish and occasional test content. Alright. So came up with a bunch of different articles on a bunch of different ideas. In a bit, we're gonna use this to actually write all these different article concepts. But for now, I just wanna keep going through the batch process to show you how it's able to pick up where it left off and continue. On this run, if you notice, it actually picked up that it needed to look up the translations and didn't have to figure that out from the schema this time. Alright. It is a new day. My cloud usage limits have reset, and we are ready to continue with step two, which is generating the articles based on the concepts that we've put together. All of the, article concepts have now been saved in these, concept notes. They take the article title. They try to figure out what on earth, the article should be about and propose a concept. So now we have the next step of the process, which is to generate a actual article for each of the articles we generate concepts on in both English and German. And we're gonna go in batches of 10 and see how well that works. We'll take this prompt and it should automatically read over all of our article concept notes and start filling in articles for those. Let's go. So we're going to use the turn concepts in the full fledged articles prompt. That's going to go and read through all of our article concept notes and start filling in those articles, and I'll show you those articles as it writes them. I have no idea if these articles are gonna make any sense. This is gonna be fun. I'm having fun reading through these articles. I have no idea how helpful any of this is, but it at least sounds very convincing. Now, the key advantage to this approach is that if we were generating concepts and writing articles at the same time, we'd have to use much smaller batches. But because we split the process into two steps, we've saved a ton of context window, and we're able to work in larger batches. And as a bonus, we can do multiple things with those article summaries, while we're working on generating those articles from those summaries. Now this isn't the most efficient workflow for generating articles. There's way better workflows for that. We're just demonstrating this concept. But a nice thing about this approach is that you can perform multiple tasks at the same time. For example, while we were working on these articles, we could also be working on something completely different using the notes that we're generating the articles from. I have this prompt here, categorize article concepts, which will allow Claude to suggest an article taxonomy based on the summaries it's already generated. It'll just read all the article concept notes and create a new note suggesting that new taxonomy. I like the way it describes these articles as a fascinating collection of technical and business focused article concepts with creative jargon filled titles that have been transformed into practical valuable content ideas. I'm not quite sure I'd be so positive about it, but Nate gets the idea across. Alright. Let's take a look at the categories that are generated and the opportunities that identified. So here's some content gaps, AI and ethics, sustainable technology operations, human centered digital transformation, all sorts of other different things. And here are some of the categories that's come up with. System architecture, it's put a bunch of different articles in that category, Ecommerce, digital business, data management and analytics, user experience and interface design, business operations or business optimization management, automation and AI systems, project management and collaboration. So So it's basically taken all of those articles that we put together and categorized them according to common themes in those articles. This could be really useful if you have an existing content collection that you're trying to build a new categorization system for. And what's great is you could just take this and create another prompt to actually apply that taxonomy to articles, and create categories and all sorts of different things for that in Directus. So by the end of this run, here's what the AI model has built: concept proposals for every article in our database, full body content for many of those articles in English and German, a whole new content categorization system for the articles it wrote, progress logs so that it doesn't lose its place, and database access hints that documents how the challenges were solved so that on future runs, it could do even better. Instead of treating AI like a disposable worker or one that can infinitely stuff and stuff and stuff and work on something until it gets all confused, we're treating it like a teammate that tracks and follows up on what it's done across multiple days, multiple runs, starting with a clean slate on each task and only pulling in the information that it needs. We turned a human in the loop batch processing task into an AI creative workflow by splitting it into discrete steps and letting it kind of pick up where it left off. We gave the model a way to track progress. We built templates to make the results more consistent and reusable, and we recorded information about the database to help the AI model get smarter over time. I've had a ton of fun nailing down this workflow and testing it on all sorts of tasks. For my work, we're actually using it to do things similar to this where we're analyzing a huge amount of content and trying to figure out how to organize and categorize and and do all sorts of things, and it's it's doing really well. The ability to take notes, record what it's done, and just kind of start over and create its own context has been incredibly helpful with turning a workflow that works really well for one or two articles into something that works well across thousands. So thank you for your time. I really look forward to seeing what everyone does with Directus and Directus MCP going forward, especially as Directus MCP evolves, AI models get more capable, and just the overall core gets stronger. The future is gonna be fun. Thank you once again to Josh for sending in that amazing showcase. This actually started because it was a post on the community forum, so do if you have been inspired and you've got any questions for Josh, he is around at community.directors.io. And, speaking of the MCP and AI, I gave a bit of a challenge to Bryant and Reich with an AI update. I was like, please can we have an AI update for the change log? And I gave them no more context, and they delivered. So here you have an AI update from Brian and Reich. Alright. And we're back. So in this segment, Beth has challenged Wrike and I to have a conversation on AI and Directus. Where that conversation is gonna go, let's see. Right? But Wrike, you know, what's what is our take on AI at Directus? We'll just What is our take? That is a very six hour long answer in a five minute segment. So let's let's start at the beginning. Well, as you know, most everybody else in the industry, we've been using AI a lot internally to try to figure out and get a feel for what works, what doesn't, where are the opportunities, where are the challenges that to then figure out what do we want to do with AI in the context of Directus. Right? So the way we see it right now, there's basically two major touch points for artificial intelligence in the world of Directus. It is one, what can external tools do with Directus on the user's behalf? So think about a a cloud desktop or a JetGPT. And secondly, what can we do using LLM technology within the studio and API to enrich the user experience of Directus itself? So Brian, you wanna start with the with the first? Yes. Absolutely. So what can external LLMs do with the data inside Directus? Right? We've already previously shipped a local MCP server, and we've, we've gotten a ton of great feedback with that. Now, what we are currently in development with is an MCP server inside Directus. So you'll be able to connect remotely to your Directus instance and use the tools that are available to add content, update blog posts, build landing pages. But more than that, you will be able to edit your actual data models. Your update, all of your schema, add new fields, improve, the, the user experience for your content editors. So that really comes together nicely as a complete picture. But, on the other side of the coin, maybe you wanna talk about the the second piece. Right? What we plan to do with AI inside Direct Us. On the internal side, we as a team really strongly believe in shipping features that add actual value. So we have seen, you know, some uses before, I I won't name names, that are a little gimmicky and not really customer friendly or actually useful in a day to day. So right now we're we have some solid plans and some early stuff in flight, that add some real value into Direct to Studio. Both using generative AI for generating and helping, optimize content and other data, but also in a way to sort of help some of the more click ops heavy configuration pieces of Directus itself. Right? So think about things like, flows or data model and things like that. On the first part though, I know we're flipping back and forth a little bit, but both both tied together. On the MCP front, one thing you mentioned there, Brian, is like it can do data modeling, it can do, you know, data access. Is is that just a a free for all agent that is just gonna go rogue on my database? Or how do we how do we protect that? I I'm glad you mentioned that because that is one of the scariest pieces of AI in my mind right now. There's other MCP servers where you can connect directly to a Postgres database and basically run any raw SQL queries against that. So you and I both, probably break out in a sweat when we talk about something like that. The MCP server inside Directus is beautiful because it is scoped by the permissions that we make, available through the API. So any, user connecting via the MCP, you can only perform the different operations that that user has access to, which means, improved security compared to the, maybe some other MCP implementations. And also we prevent you from taking super destructive actions that, could, result in a lot of data loss or just general heartache for both content editors and developers. Phew. Thank God. Yeah. Because to your point that, that does make me break out in, in sweat. And the same goes for for the work that we're doing with LMS within the studio at the moment. Right? I think it's important to mention. So where, in in our testing with the MCP server, we find, you know, a lot of the LMS as of September 2025 because the stuff change all the time. It is oftentimes a little trial and error. Right? You see an LOM tries something, it fails, it gets an error, tries again, it fails, it tries again, and it succeeds, and sometimes it gets there, and sometimes it doesn't. We spend quite a lot of time, really optimizing the system prompts to get that reliability up and up and up and it's in a spot where I'm like, this is actually fairly reliable. Like, as in as reliable as we can get it from an L. M. But by by integrating the L. M. Technology straight into the studio piece of it, we have the opportunity to do an extra layer of validation as well. Which means that we can make sure that we know what the l l m is about to do or what it wants to do and we can allow the user to validate and verify that before actually running some of these pieces. You know, akin to what you might have seen in a in a cursor or Copilot right before it runs terminal commands, things like that. So anyways, we'll we'll leave it at that because I don't wanna, you know, tease too much before before it's ready for the prime time. But we have some very exciting stuff coming. So I believe the MCP server, will ship somewhere in this month. We're sort of in the final testing phases. If you're interested, please do check out the PR if this goes out before it's merged. Otherwise, you'll see it on the main branch and in the upcoming release. For the internal AI piece, like I said, it's very much research and development early testing. Just feel free to ping me anywhere on the internet if you're interested to sort of learn more about that. We're always happy to chat and learn from, you know, what people actually wanna use this for. But expect more on that in the near future. So stay tuned for that. And with that, back again to Beth. Alrighty thank you once again to Brian and Reich especially since I gave them not much context I was like I'm just gonna bring you into a recording studio and we're gonna talk about some things. So that was really helpful and I hope you're all excited if again if you've got any questions, do let us know. We're now gonna get over to Brian with a section for the community hotline. And we're back with another episode of the community hotline. Welcome. Today, we have Wylus, Wylies. Sorry if I get the name wrong. Welcome to the community. Glad to have you, friend. Alright. So our question today, is building a front end CMS within Directus possible? So we'll tackle that in a moment. Let's read the rest of this. Good day, gurus. I'm looking for a powerful tool to support the following. SaaS, hold hosting multiple tenant within one project, creating pages if possible, but how could I render it within Directus? I saw tutorials, but only using Directus as a back end. How can we make this work potentially? Alright. So first and foremost, right, Directus is set up to be a headless CMS and back end. So that paradigm is very important to understand. WordPress is, has a headless option, but it's ideally a monolithic kind of solution where you've got your CMS and you've got your front end and the templating and all that is mixed together, whereas Directus is headless and that's the way it's designed. So you can, send that data to multiple sources. Maybe you've got a a front end, maybe you've got a mobile application, maybe you've got a kiosk or a display that you need to send data to or fetch data, from a back end. Directus is great for that. When it comes to building a front end CMS within Directus, basically, you're talking about the Directus App Studio. Right? I can not only just add my own team members to this, but I could potentially create a multi tenant CMS out of the Data Studio itself. So, if you take a look at our CMS starter, this is available, you know, through the website. If you go to directives.io, you hit this command line, or this script here. Just pop this into your terminal, select the CMS option, or if you go to our cloud, log in, you spin up a new project inside cloud, just pick the CMS template and you can get access to what I'm gonna show you here today. Right? So this comes out of the box. This is a a CMS. It's exactly what you would expect out of a CMS. We have pages, we have posts, etcetera. Now if I wanted to make this multi tenant, how would I go about it? Well, first, I would create a tenant collection. Maybe that's sites or, properties or whatever we wanna call it. And then for each collection within this, I add a relationship, many to one, back to that site's collection, back to that tenant collection. And then within our access policies, you've got everything you need to basically scope access down. So you can filter based on the site, so that one tenant cannot read the, data from another. Now, there's an specific episode of 100 apps, one hundred hours where we cover this exact thing. So just look for multi site. That mission is season three episode two. You can follow right along with this and see how to set up a multi tenant CMS using Directus. Now to your other question. Right? How can I create pages or render within Directus? Now Directus itself is extremely flexible, and this is where our extensions come into play. And a good example of that, if we just go to directus.io and we look at our sandbox demo, there's a little extra module in here that is not, baked into directus core. This is just an extension that we built to give you a welcome page that does get rendered inside Directus. Now this is coming from a separate Directus instance, but again, all of Directus is modular and extensible. So this is actually a module extension. But if we just go to our docs, we look for our guides, we go to the extensions section, you can learn all about extensions. So you can customize the way that you interact with data inside the forms. Those are interfaces. You can control the way that data is displayed in the different layouts throughout the studio. That is a display. You have layouts themselves so you can control the listing of these items. You know, I think tables or kanban, views or maps, whatever. We can add panels to the dashboards and kind of the overall level where you've got total control over what gets rendered on the page, you have a module. So if you want flexibility on how things are rendered inside Directus, Maybe you wanna add some extra pages to it or you just want something, a blank canvas where you could totally experiment with whatever you want. Custom modules are what you're looking at. So, with that in mind, I hope that is enough to answer your question. Wireless. Wireless. Sorry. Again, I hate if I get it wrong. But that's it for this episode of Community Hopeline. If you want me to answer one of your questions on the next change log or or on the next community hotline, make sure you hop into the Directus community, community.directus.io, and I'll see you around. We want to take a moment towards the end of the changelog for thanking our community contributors who give their time to improve the director's project. Since last changelog, there have been 11 contributors. Thank you to Josh for fixing require selection check for manual trigger flows, Klayvo for adding a message property to the SDK error object, Amos for removing duplicate code in fields read all, Gerard for fixing a bug that was preventing translations from displaying in the calendar layout, Danton for fixing a bug that prevented pop ups from working in the WYSIWYG interface when opened in a drawer, Hughes for adding WebSocket authenticate filter hook, Abdullah for fixing the code tool to the WYSIWYG text editor and for fixing links in WYSIWYG missing underline and pointer cursor styling, Matt for adding TypeScript support for services within the extension context and for fixing an issue for empty states not being centered in RTL languages, Tim for standardizing batch mode for raw group fields, Gloria for enabling text selection in the studio, studio, Jens for adding the ability to override the email from property. Thank you again to everyone mentioned. You can see their specific full request inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of July and August who financially contribute to Directus' development. A huge thank you to Weifan, Jens, Mike, Fergus, Omar, Marcus, Mission Control, Utomic, Steven, James, Nonlinear, Andreas, John, Wayne, Burb, Adam, Jason, Yuya, Vincent, c k, Valentino, and Hadi. The money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright. And that is it for the change log of September 13. Thank you if you are still with us and you've made it to the end. You're my favorite people. No matter whether you are new to this changelog or you've been returning each time, we hope to see you again. As we've said multiple times within this changelog, if you do have any questions, let us know. And, yeah, that's it. Have a great rest of your day, your week, and your month, and we hope to see you really soon. Have a good one, everyone. Take care. Bye.","77bf786f-8146-4b70-9b81-5ed46eb4333e",[399,400,401],"f8974511-d9e9-4907-9df1-9b5ba335564a","72df55fe-a262-4ba1-9794-bc73ab064378","43ed1773-7a33-4e11-b399-5742b57e74a1",[],{"id":139,"number":140,"show":122,"year":141,"episodes":404},[143,144,145,146,147,148,149,150],{"id":137,"slug":406,"vimeo_id":407,"description":408,"tile":409,"length":410,"resources":8,"people":8,"episode_number":153,"published":411,"title":412,"video_transcript_html":413,"video_transcript_text":414,"content":8,"seo":415,"status":130,"episode_people":416,"recommendations":419,"season":420},"February-2026","1168199994","Join us for The Changelog, taking you through the month’s Directus updates including product updates, new content and community contribution highlights. This month's show includes an AI update from Bryant and a new community program to get involved with from Beth.\n\n","253fe0a0-a0f9-4d82-9e60-5e38f3d8bed4",33,"2026-03-04","February 2026","\u003Cp>Speaker 0: Hello everyone, welcome to the changelog from Directus for February. I'm Beth and we have a really great show for you coming up. We've got a product update from James, an AI update from Brian, I'm around with a brand new community program to get involved with and we have a fresh one app ten minute episode with some brand new directors faces, so do stick around if you can. Whether you are joining us for the first time or you are a regular, hi hello, thank you for spending some time with us, and without further ado, let's kick it off with James and a product update for you.\u003C/p>\u003Cp>Speaker 1: Hey. This is James from Directus, and I'm gonna take you through some of the highlights in the 11 dot 15 release. Now first up, our AI assistant is now in GA, and it is coming with some very tasty updates. We've added multi provider support with Google and OpenAI compatible providers. So now you can use our AI assistant with Olauma Mistral AI, extending on prior support for exclusively anthropic and OpenAI.\u003C/p>\u003Cp>We've also made the AI assistant native across all of the interfaces in the director studio, meaning you can even use the AI assistant in the visual editor now. Now with new power comes new responsibility. And to use this feature, you will need to update the Director's visual editing library to v 1.2.0 plus on your website. We've also added a new deployments module inside Director's. This allows you to connect your Director's instance with Vercel to centrally manage deployments, monitor build status and control your front end projects all without leaving Directus.\u003C/p>\u003Cp>We've added support for Vercel first, but Netlify and others are sure to come soon. Let's have a look at how it works. You'll find the Deployments module inside the settings and you'll need to enable this first. Once you've enabled that you're going to get the Deployments module in the sidebar of Directus. Let's take a look.\u003C/p>\u003Cp>Let's have a go at configuring Vercel. What you'll need is your personal access token from Vercel, and here's one I have from earlier. Once you add that, you'll see the projects listed from your Vercel account. You can choose to bring one or more of these into directors. So let's bring in a couple.\u003C/p>\u003Cp>Now you see the projects listed in the project listing. And if we click into one of these, we're able to hit deploy and start building our site from inside directors. So let's assume that we've made some content changes. Patch we've updated, you know, the price of an item on our website. And as a result, we need our site on Vercel to be rebuilt.\u003C/p>\u003Cp>So I'd come into the deployments module after making that content change and I'd hit deploy. Now the other great thing here is we can monitor the deployment status as that is building. So in case that fails, I'm gonna be able to see the reasons for the site failing. And when it's successful, I'm actually gonna have the link up at the top right to be able to visit the end result. So we'll just give that a second while it's building.\u003C/p>\u003Cp>Awesome. Now I can see the status is ready. And if I hit refresh, I'm gonna see this link up here which allows me to visit the end result. Now if I come back into here, I can see I can go back and I can see the deployment listing. Now one thing to call out is you're only gonna see deployments triggered from Directus inside the listing today.\u003C/p>\u003Cp>So all of your deployments made from Vercel will not appear here at the moment. One last call out is at the moment, the deployments module is only accessible for admins. However, we do plan to add, RBAC support so you can open this up to more users in the next release. We've also brought collaborative editing into core. Now this was previously built as an extension, but we wanted to bring it into core to make some performance improvements, reduce the amount of setup, and make sure that this is a native capability.\u003C/p>\u003Cp>Now under the hood, this runs on WebSocket connections for real time sync, so you do need to have this enabled on your project. It also plugs into the existing Director's permissions so users can only collaborate on records they have access to. Let's have a look at how to enable this in 11.15. You'll find this new setting in the project settings in your Directus instance. And once enabled, this will enable the real time sync.\u003C/p>\u003Cp>So let's take a look at a record in our content space. We've got a collection of products, and let's assume that two people are working on the denim jacket. And I will just there we go. We can see that both myself, James, and Michael Matthews are now working inside, the Product Datastem. Now let's assume that somebody is working inside a specific field.\u003C/p>\u003Cp>You'll see that that field lock comes into play, and that stops people overwriting each other's changes. So that's collaborative editing, and that's now available in the core. Now we've also made some improvements to how you can review view revisions inside the studio. So let's assume that we're updating the price of our denim jacket. And let's come back in to look at the revisions.\u003C/p>\u003Cp>Now previously when you viewed a revision, we were always comparing the revision you open to the latest revision of that item. But we've made some changes to make this a little bit more intuitive. So if I update my latest revision, you'll see I have that revision on the right hand side and I'm always comparing it to the previous revision now so that we can see the granular change from a 100 dot 99 to 50.99 in this case. Now we've also maintained some flexibility for you to compare a previous revision. Let's choose a much older one and see how that currently compares to the latest revision.\u003C/p>\u003Cp>Now this is advantageous in the case for restoration, in case you wanted to restore an older version but you want to understand exactly what it's going to update on the latest version of that item. So you just toggle this pill and you can switch between what you're comparing inside the revisions comparison model. So we've been through all of the main items inside the 11 dot 15 release. But as usual, you can go to the release notes on GitHub if you want to view every granular change, that got made inside 11 dot 15.\u003C/p>\u003Cp>Speaker 2: Hey, guys. Brian here. And I'm gonna showcase some of the exciting new features we shipped to the AI assistant in v 11 dot 15. Alright. First and foremost, it's an absolute banger.\u003C/p>\u003Cp>Not only can you now use the visual editor right alongside the form inside the live preview pane, but I can use the AI assistant right alongside the visual editor. I just click the magic AI button here. And now the AI assistant has this visual editor element into our context. And we'll just ask it to, let's punch up the copy a bit for this headline. Cool.\u003C/p>\u003Cp>So it understands where that is at on the page, what's going on. And now we can see once we approve that tool call, that gets updated in line. All right, that's just the start, right? That is a heavy hitter in this case. You can also add context to the AI assistant now.\u003C/p>\u003Cp>So, I can update pages that I'm not currently on. Let's say I've got this test page. Please update the slug and title for the test page to slash about. Right? And because we are injecting that into the context, it knows what page to update.\u003C/p>\u003Cp>And if we just go back to our pages list, we could see now that is updated. Last but not least, you can also reuse the AI prompts, those templated prompts from the MCP. So if you go to your AI settings, make sure that the MCP is enabled and that you've got the AI prompts collection. And then you can reuse these prompts over and over again. So if there are dynamic variables, Directus will ask you to fill those out.\u003C/p>\u003Cp>Or you know, if you don't have any variables, you could just\u003C/p>\u003Cp>Speaker 3: do this and say, hey,\u003C/p>\u003Cp>Speaker 2: tell me a nice dad joke. Alright. We'll see what it comes up with. Guy walks into a library, books about paranoia. She whispered, they're right behind you.\u003C/p>\u003Cp>Perfect. Alright. Now, onto some of the other items that you guys asked for, and I wanted to make sure that we delivered here. So now you can also control which models for the three major providers, OpenAI, Anthropic, and Google, so you can lock those down. The other big rock out of this release is going to be the OpenAI compatible provider.\u003C/p>\u003Cp>So as long as you have an endpoint that is OpenAI compatible, you can now go in here and set your base URL, add your API keys, you could set up your different models. Make sure you include the context limit, the output limit. You can also pass custom provider options if needed. And then you can use Ollama or, any other self hosted models, any other, OpenAI compatible models. Let's say, hey from Ollama.\u003C/p>\u003Cp>And this might be just a little bit slow because my MacBook is absolutely screaming at me right now. We'll fast forward. Alright. So now you can see that we've got the text back. Your mileage is gonna vary with the self hosted models, but, you know, if you've got Azure OpenAI or some other open open AI compatible endpoint that you're using, this is a great solution for you.\u003C/p>\u003Cp>And as always, keep the feedback coming. We love to iterate on these features, and we want to deliver real value instead of just the usual AI hype. That's it for me. Back to you, Beth.\u003C/p>\u003Cp>Speaker 0: I'm here to talk through a brand new community program we're launching called Directus Builders. Builders is a community champion program for people who use Directus, want to share what they're building, and contribute to the community. Whether you're interested in sharing technical insights and receiving amplification from our social channels, joining a network of other directors users, or getting our support for your own community initiatives, this program is for you if you are using directors to build. By joining, you'll enter a private community with other experienced builders and our team. It's open to contributors, customers, partners, users, really anyone who uses Directus to build something useful.\u003C/p>\u003Cp>You don't need to be building something huge, you just need to be building something real. If you're the person who likes helping others figure things out, sharing what you've been learning, or creating something cool, we want to hear from you. Applications to join the first cohort are now open. If you've got any questions or you have an idea that you think might work as part of this programme, we're all ears, we want to hear it. There's a couple of ways you can get in touch with us: submit via the application form, send an email to devreldirectus.\u003C/p>\u003Cp>Io, or post on the community forum. All of those work and we can get talking from there. We're really excited about launching this program, we hope you will also share the excitement and want to join and we're really looking to shape the future of the program collaboratively with the builders into something that works for everyone. So if you do have ideas, thoughts, questions, please do let us\u003C/p>\u003Cp>Speaker 3: know. Alright, viewers. Welcome to, yet another episode of 100 app, 100 oh, no. No. No.\u003C/p>\u003Cp>No. One app in ten minutes. Right? We are doing the remix version today where we have ten minutes to build and plan plan and build an amazing app clone, crazy suggestion, and I have no idea what we're gonna do. So the rules.\u003C/p>\u003Cp>Right? Ten minutes to plan and build. No more, no less. How we're gonna do that? We are going to use some, amazing tools that we have built into Directus.\u003C/p>\u003Cp>And then, rule number two, the anti rule. Use whatever you've got at your disposal. Today, I've got two awesome dudes at my disposal, mister Alvaro and Mark from our team here at Directus. No strangers to the Vue community. Welcome to the show, gents.\u003C/p>\u003Cp>Speaker 4: Thanks for having us, Bryant.\u003C/p>\u003Cp>Speaker 5: Thank you very much for the nice intro. Happy, to be here.\u003C/p>\u003Cp>Speaker 3: Yeah. Yeah. No. I'm super excited. Have you guys given any thought to what we're what we're gonna build?\u003C/p>\u003Cp>Speaker 5: I think, Mark, you have some idea though.\u003C/p>\u003Cp>Speaker 4: Yeah. So yesterday, we talked a little bit. I talked with Ava what we could build and, I don't know if if I showed it to you, Brian, but on my website I have a, instead of new year's solutions, I have new year's bingo cards. So you have five by five grid of stuff I want to do in the year. And if I get at least one in a row, so diagonal or horizontal or vertical, I already have bingo and it's a success.\u003C/p>\u003Cp>So I don't have to do all of them. And if you go to mark.dev/bingo\u003C/p>\u003Cp>Speaker 3: Okay. Let's check it out, guys.\u003C/p>\u003Cp>Speaker 4: You can it's still since it's just well, now February, not a lot has happened there. But\u003C/p>\u003Cp>Speaker 5: it's a it's a really nice way to actually do some of the New Year's resolution. I always get the press at the end of the year like I have done, like, a quarter of them.\u003C/p>\u003Cp>Speaker 3: Yeah. I love it. Alright. So alright. This is neat, man.\u003C/p>\u003Cp>I I miss Yep.\u003C/p>\u003Cp>Speaker 4: And each of them can be either, like, you did it or you didn't do it or it can be progressive. Like, read six books and you are, like, one books, two books, three books in. And I think I also have, like, sub tasks. If we can make that work, like, if one one, let's say, one bingo item has a few sub items as well. Like, don't have an example now, but that would also be cool.\u003C/p>\u003Cp>Speaker 3: Gotcha. Okay. New Year's resolution. Bingo card generator. Alright.\u003C/p>\u003Cp>That's what we're doing. This is gonna be amazing. This should be fun. What color are you guys feeling? Purple, pink?\u003C/p>\u003Cp>Speaker 5: I go I go purple. Blue. Or purple?\u003C/p>\u003Cp>Speaker 3: Purple. There we go.\u003C/p>\u003Cp>Speaker 4: Direct is purple. Nice.\u003C/p>\u003Cp>Speaker 3: Direct is purple. Alright, guys. Alright. So I'm sure you've seen the show. We're gonna start the clock.\u003C/p>\u003Cp>We got ten minutes to plan and build this thing. Let's do it. Alright. So the first thing I usually do here is cover requirements. Right?\u003C/p>\u003Cp>So what are the requirements we need out of this? Right? We need to generate bingo cards. Like, what do you what were you calling those?\u003C/p>\u003Cp>Speaker 4: Like, items probably or\u003C/p>\u003Cp>Speaker 3: Okay.\u003C/p>\u003Cp>Speaker 4: Goals. Yeah. Items.\u003C/p>\u003Cp>Speaker 5: Yeah. Like a grid of of of items. Mhmm.\u003C/p>\u003Cp>Speaker 3: Yeah. Alright. So we got some goals. Those are what kinda fields are you tracking on those? Just the name of the goal?\u003C/p>\u003Cp>Speaker 4: Yeah. A name description and then the status.\u003C/p>\u003Cp>Speaker 3: Status of the goal. Progress. Progress. Is it are you status and progress interchangeable?\u003C/p>\u003Cp>Speaker 4: Yeah. I guess if you like the if the progress is under percent, the status\u003C/p>\u003Cp>Speaker 3: Ah, okay. Yeah. Yeah. Yeah. Got it.\u003C/p>\u003Cp>Okay. And then we've got if you got goals, you got what? Items underneath the goals? We want, like, subtasks, like, if it's\u003C/p>\u003Cp>Speaker 4: You you can have subtasks. Let's see if there's one that has subtasks. I don't remember.\u003C/p>\u003Cp>Speaker 3: Task. It's called test.\u003C/p>\u003Cp>Speaker 4: Alright. So that the task would play into into progress as well, I guess.\u003C/p>\u003Cp>Speaker 3: Into goal. And then the task completed increases progress. Cool. Alright. And task needs what?\u003C/p>\u003Cp>Name? Description? No. Just name? Date date probably.\u003C/p>\u003Cp>Speaker 4: Maybe the, the item can have a a completed ad. Yeah. They completed as well for the task for the, item on top. Yeah.\u003C/p>\u003Cp>Speaker 3: Alright. And then we we wanna try to get a front end set up for this as well. Yeah. Alright. And we we need a front end to display the pingo cards.\u003C/p>\u003Cp>Alright. This could be a stretch in seven minutes now. Let's see how we do. Alright. So what are we using today?\u003C/p>\u003Cp>Right? We've got a blank directus project. We've got Claude code over here. Let's dive into it. Alright?\u003C/p>\u003Cp>I'm going to I'm not sure what you guys have been coding with. I've been using Super Whisper. I dig it. Alright. How are you doing?\u003C/p>\u003Cp>Alright, guys. We are building a New Year's resolution bingo card generator. I'm gonna copy and paste the data model that we want. You have access to a direct assistance. I want you to create our schema for that.\u003C/p>\u003Cp>We're also going to be building a front end to display the bingo cards. Let me know what questions you have. Let's create a plan. Alright. So this is crunching the transcript for that right now.\u003C/p>\u003Cp>Cool. There we go. I'll just, copy and paste this. Hopefully, we'll get some something good out of it. And we're gonna ask Claude Coad to plan.\u003C/p>\u003Cp>Speaker 5: Alright.\u003C/p>\u003Cp>Speaker 3: So now we've got the schema. So we've got the direct us MCP connected to this thing. And I I think you guys have had a chance to try this out already. Right? Yeah.\u003C/p>\u003Cp>Speaker 4: I think Avro has. I haven't.\u003C/p>\u003Cp>Speaker 5: Yeah. Play with it in the morning. It's gonna create the collections, the scheme is for you.\u003C/p>\u003Cp>Speaker 3: Yeah. Alright. So it's got a fresh direction. No custom collections. Alright.\u003C/p>\u003Cp>And I can zoom in just a little bit more so we could see this. What is the plan? And this is probably one of my favorite parts about this thing where it will prompt you for questions. Direct us flow, that's what we wanna do there. Vanilla JS.\u003C/p>\u003Cp>Yeah. That's what we'll do. What do you guys think? Five by five grid? Four by four?\u003C/p>\u003Cp>Speaker 4: We we can do also four by four so we don't have to come up with 25 things.\u003C/p>\u003Cp>Speaker 3: Amazing. Right? We got five minutes left.\u003C/p>\u003Cp>Speaker 5: You you can say to the MCP, hey, cloud, get, your twenty twenty six, bingo\u003C/p>\u003Cp>Speaker 4: Oh, that was cool.\u003C/p>\u003Cp>Speaker 3: Yeah. Yeah. Alright. Public read, that's fine. Anyone can view those.\u003C/p>\u003Cp>Cool. Alright. And now, hopefully, this thing should have a plan.\u003C/p>\u003Cp>Speaker 5: I wonder which resolutions Cloud Cove could have.\u003C/p>\u003Cp>Speaker 3: I don't know. Let's see. We'll we'll spin that up in an in a new find out. Alright. Cool.\u003C/p>\u003Cp>Right? Here's the direct to schema. There's our it's gonna create a flow. It's gonna create the front end. Sounds good.\u003C/p>\u003Cp>Let's let's roll with it. Right? I don't know what we're actually doing other than just talking this through here, but, I'm curious to see just how this thing works. I've you know, of course, like, spent a ton of time testing and building the MCP, but I've not spent a ton of time using it with the the latest Opus four five model. Alright.\u003C/p>\u003Cp>So it is checked the existing schema. Now we are it should start implementing. Yes. Please just start jamming on here. And if I refresh, now we should see some collections start to come in to the direct instance.\u003C/p>\u003Cp>We should see some collections. Start to come into the direct instance. There we go. Okay. Alright.\u003C/p>\u003Cp>Oh, nice. I was just worried that I did something wrong. So we got our goals. We got our tasks. Amazing.\u003C/p>\u003Cp>Right? Now I could go in. We could potentially create some new ones if we need. One of the things that I like about this is it, like it seems like the anthropic models do a better job of, like, actually putting together a cohesive form than than, like, the OpenAI ones. So it's going through creating relations and fields.\u003C/p>\u003Cp>Alright, guys. So in this other one, create, some New Year's resolutions for yourself, Claude. Alright. You guys have any more guidance for this thing?\u003C/p>\u003Cp>Speaker 4: They should follow this the smart principle, probably.\u003C/p>\u003Cp>Speaker 3: Follow the smart principle. What's the smart principle?\u003C/p>\u003Cp>Speaker 4: Now you got me. So it's like measurable, achievable.\u003C/p>\u003Cp>Speaker 3: I know what you're talking about now. Yeah. The smart goals.\u003C/p>\u003Cp>Speaker 1: Yeah. Yeah. Yeah.\u003C/p>\u003Cp>Speaker 3: And include the add them to the goals and tasks inside.\u003C/p>\u003Cp>Speaker 4: For the for me, the most important one is always measurable. You have to be able to measure what you do. If not, you lose yourself.\u003C/p>\u003Cp>Speaker 5: You lose yourself. That's so funny.\u003C/p>\u003Cp>Speaker 3: That is very poetic. I love it, man. Alright. So it looks like okay. Yeah.\u003C/p>\u003Cp>I was just making sure we've got the relationship created correctly there. Alright. It is going to so we got two claws going. We got two minutes here. Let's see.\u003C/p>\u003Cp>I can see their goals and tasks.\u003C/p>\u003Cp>Speaker 5: Alright. This is the next development, man. Right? This is\u003C/p>\u003Cp>Speaker 3: the next development. Yeah. This thing is going to yeah. I need to enter YOLO mode so we can actually have this thing not stop to do these calls. But, behind the scenes, right, it is building this progress calculator flow.\u003C/p>\u003Cp>And and flows are Sure. A a nice piece of functionality. It can be a little time consuming to set up, like, complex flows via the UI. So having direct us put these together, is, yeah, definitely time saving. Right?\u003C/p>\u003Cp>That's probably, like, five, ten steps there. Yes. Create those items. Alright. Let's see what we've got.\u003C/p>\u003Cp>Are we gonna get to the front end for this thing? I don't know if we are, man.\u003C/p>\u003Cp>Speaker 4: I should've had Bryant.\u003C/p>\u003Cp>Speaker 3: Should've had, Claude do that first. It's connecting the operations. Claude, you need to go faster, my friend. Alright. So what are the what are the goals that Claude set for itself?\u003C/p>\u003Cp>This should be interesting.\u003C/p>\u003Cp>Speaker 5: Put that description statement.\u003C/p>\u003Cp>Speaker 4: I'll reduce\u003C/p>\u003Cp>Speaker 3: average response latency by 20%. Achieve 95% task completion rate without clarification. What an interesting goal. Here's the the individual tasks. And, oh,\u003C/p>\u003Cp>Speaker 5: and that was done there.\u003C/p>\u003Cp>Speaker 3: The HTML.\u003C/p>\u003Cp>Speaker 5: The front end.\u003C/p>\u003Cp>Speaker 3: Now it's doing it. No. Let me open this test project up. Is it going to have enough time? Yes.\u003C/p>\u003Cp>Proceed. New Year's resolution. Bingo. Oh, no. We ran out of time.\u003C/p>\u003Cp>It's so close. MCP connection should have access. No need to set up. I think, you know, this was so close, guys. I'm just going to it's against the rules, but you know what?\u003C/p>\u003Cp>We can make up our own rules here. I am just going to give access here to see and see if this will actually finish. Of course. There it is, man. The API permissions got us.\u003C/p>\u003Cp>We could see the bingo card here. There's the individual task. Ten minutes, full working back end with permissions, so close to a working front end.\u003C/p>\u003Cp>Speaker 4: It did pretty cool.\u003C/p>\u003Cp>Speaker 3: This is this is very cool. Right?\u003C/p>\u003Cp>Speaker 5: Even even with the subtask because that that wasn't an extra thing. Like, now it's the only iteration. Like, put the progress in the front end and\u003C/p>\u003Cp>Speaker 3: Yeah. I'm very curious to see. Right? It's already got it looks like it maybe did it miss some of the flows? Right?\u003C/p>\u003Cp>So the thing to take away here is obviously, like, you could build incredibly quickly with Directus and MCP, and this is not loading, probably because of my computer. Just hates running all these Docker containers locally. What is going on?\u003C/p>\u003Cp>Speaker 5: How many do you have?\u003C/p>\u003Cp>Speaker 3: There's probably, like, five or 10 running at the moment, like, different instances. And I'm sure if I, like, killed the camera, it would probably stop doing this. I don't I don't know what's going on here. Local host 8055. I at least want to end this episode on a high note and show something.\u003C/p>\u003Cp>Come on. Alright. So we could see the flows. Did they yeah. It actually connected the flow.\u003C/p>\u003Cp>So I'm just curious. Right. Just wanting to see. Right? Build a mastering five new programming frameworks.\u003C/p>\u003Cp>Let's say we completed this right now. Does this flow actually work? And So it it\u003C/p>\u003Cp>Speaker 5: it could increase the progress of the task of the goal.\u003C/p>\u003Cp>Speaker 3: It should. It should. And, of course, doing a hard refresh here is not not a great idea.\u003C/p>\u003Cp>Speaker 2: Alright. Well, gents,\u003C/p>\u003Cp>Speaker 3: you know, I'm not sure whether to put a, like, a thumbs up stamp on this one. Thumbs down stamp. So we just do I think yeah. This was, we we got most of the functionality\u003C/p>\u003Cp>Speaker 5: here. We\u003C/p>\u003Cp>Speaker 3: just didn't get, the front end all the way there.\u003C/p>\u003Cp>Speaker 4: Oh, Brian, you are lagging quite\u003C/p>\u003Cp>Speaker 3: Of course, I did.\u003C/p>\u003Cp>Speaker 5: Yeah.\u003C/p>\u003Cp>Speaker 3: Because it does I think you\u003C/p>\u003Cp>Speaker 4: you get a a thumbs up, Brian, because it we got a working thing at the end, and you had the the grid showing everything with the progress. So I think you get a thumbs up.\u003C/p>\u003Cp>Speaker 3: Yeah. Alright, guys. My computer is struggling. So we are going to sign off for this episode. Mark Alvaro, I've heard a little rumor that there might be a podcast coming up, so I'm super excited for that.\u003C/p>\u003Cp>Thanks for joining me for this episode of one app in ten minutes.\u003C/p>\u003Cp>Speaker 0: We want to take a moment towards the end of the change log for thanking our amazing community contributors who give their time to improve the director's project. In January, we had 14 contributors, and so we'd like to say a huge thank you to Oscar for removing the deprecated webhooks functionality across the stack, Abdullah for removing the comment tab from the activities page, Thomas for adding concurrency control for file uploads via a new files max upload concurrency environment variable, 'kiki' for fixing an issue that would cause some draw header icons from being displayed too large, 'pancaj' for fixing incorrect initial slider fill position when the midpoint is not a valid stepped value, and for fixing markdown editor layout when a minimum input height is applied. VDR for fixing sticky column background in many to many list interface. Fan for improving system permissions collection picker to support easier multi selection. Ty for replacing the local use local storage composable with the view use equivalent, Daniel for disabling text highlighting for druggable view elements in Chrome and Firefox, Clint for fixing permission cache to respect cache system TTL, Bruno for fixing conversion of fields from object notation to dot syntax in SDK subscription queries, Arthur for fixing an issue where the Supabase storage driver would fail if the root folder is the empty string, and Joseph for adding support for specifying a KMS key ID in s three storage when using AWS KMS server side encryption.\u003C/p>\u003Cp>Thank you again to these individuals. You can see their specific pull inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of January who financially contribute to Directus' development. Thank you to Wayfan, Mike, Fergus, Omar, Marcus, Mission Control, Utomic, Steven, James, Manuel, Andreas, John, Burb, Adam, Jason, Yuya, Valentino, Jens and Wayne. The money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem.\u003C/p>\u003Cp>Thank you again for being part of that. Alright, that is it for this month's changelog, if you are still here still watching thank you very much for spending the time with us. If you have any questions head on over to the directors forum, have a great rest of your day and see you soon.\u003C/p>","Hello everyone, welcome to the changelog from Directus for February. I'm Beth and we have a really great show for you coming up. We've got a product update from James, an AI update from Brian, I'm around with a brand new community program to get involved with and we have a fresh one app ten minute episode with some brand new directors faces, so do stick around if you can. Whether you are joining us for the first time or you are a regular, hi hello, thank you for spending some time with us, and without further ado, let's kick it off with James and a product update for you. Hey. This is James from Directus, and I'm gonna take you through some of the highlights in the 11 dot 15 release. Now first up, our AI assistant is now in GA, and it is coming with some very tasty updates. We've added multi provider support with Google and OpenAI compatible providers. So now you can use our AI assistant with Olauma Mistral AI, extending on prior support for exclusively anthropic and OpenAI. We've also made the AI assistant native across all of the interfaces in the director studio, meaning you can even use the AI assistant in the visual editor now. Now with new power comes new responsibility. And to use this feature, you will need to update the Director's visual editing library to v 1.2.0 plus on your website. We've also added a new deployments module inside Director's. This allows you to connect your Director's instance with Vercel to centrally manage deployments, monitor build status and control your front end projects all without leaving Directus. We've added support for Vercel first, but Netlify and others are sure to come soon. Let's have a look at how it works. You'll find the Deployments module inside the settings and you'll need to enable this first. Once you've enabled that you're going to get the Deployments module in the sidebar of Directus. Let's take a look. Let's have a go at configuring Vercel. What you'll need is your personal access token from Vercel, and here's one I have from earlier. Once you add that, you'll see the projects listed from your Vercel account. You can choose to bring one or more of these into directors. So let's bring in a couple. Now you see the projects listed in the project listing. And if we click into one of these, we're able to hit deploy and start building our site from inside directors. So let's assume that we've made some content changes. Patch we've updated, you know, the price of an item on our website. And as a result, we need our site on Vercel to be rebuilt. So I'd come into the deployments module after making that content change and I'd hit deploy. Now the other great thing here is we can monitor the deployment status as that is building. So in case that fails, I'm gonna be able to see the reasons for the site failing. And when it's successful, I'm actually gonna have the link up at the top right to be able to visit the end result. So we'll just give that a second while it's building. Awesome. Now I can see the status is ready. And if I hit refresh, I'm gonna see this link up here which allows me to visit the end result. Now if I come back into here, I can see I can go back and I can see the deployment listing. Now one thing to call out is you're only gonna see deployments triggered from Directus inside the listing today. So all of your deployments made from Vercel will not appear here at the moment. One last call out is at the moment, the deployments module is only accessible for admins. However, we do plan to add, RBAC support so you can open this up to more users in the next release. We've also brought collaborative editing into core. Now this was previously built as an extension, but we wanted to bring it into core to make some performance improvements, reduce the amount of setup, and make sure that this is a native capability. Now under the hood, this runs on WebSocket connections for real time sync, so you do need to have this enabled on your project. It also plugs into the existing Director's permissions so users can only collaborate on records they have access to. Let's have a look at how to enable this in 11.15. You'll find this new setting in the project settings in your Directus instance. And once enabled, this will enable the real time sync. So let's take a look at a record in our content space. We've got a collection of products, and let's assume that two people are working on the denim jacket. And I will just there we go. We can see that both myself, James, and Michael Matthews are now working inside, the Product Datastem. Now let's assume that somebody is working inside a specific field. You'll see that that field lock comes into play, and that stops people overwriting each other's changes. So that's collaborative editing, and that's now available in the core. Now we've also made some improvements to how you can review view revisions inside the studio. So let's assume that we're updating the price of our denim jacket. And let's come back in to look at the revisions. Now previously when you viewed a revision, we were always comparing the revision you open to the latest revision of that item. But we've made some changes to make this a little bit more intuitive. So if I update my latest revision, you'll see I have that revision on the right hand side and I'm always comparing it to the previous revision now so that we can see the granular change from a 100 dot 99 to 50.99 in this case. Now we've also maintained some flexibility for you to compare a previous revision. Let's choose a much older one and see how that currently compares to the latest revision. Now this is advantageous in the case for restoration, in case you wanted to restore an older version but you want to understand exactly what it's going to update on the latest version of that item. So you just toggle this pill and you can switch between what you're comparing inside the revisions comparison model. So we've been through all of the main items inside the 11 dot 15 release. But as usual, you can go to the release notes on GitHub if you want to view every granular change, that got made inside 11 dot 15. Hey, guys. Brian here. And I'm gonna showcase some of the exciting new features we shipped to the AI assistant in v 11 dot 15. Alright. First and foremost, it's an absolute banger. Not only can you now use the visual editor right alongside the form inside the live preview pane, but I can use the AI assistant right alongside the visual editor. I just click the magic AI button here. And now the AI assistant has this visual editor element into our context. And we'll just ask it to, let's punch up the copy a bit for this headline. Cool. So it understands where that is at on the page, what's going on. And now we can see once we approve that tool call, that gets updated in line. All right, that's just the start, right? That is a heavy hitter in this case. You can also add context to the AI assistant now. So, I can update pages that I'm not currently on. Let's say I've got this test page. Please update the slug and title for the test page to slash about. Right? And because we are injecting that into the context, it knows what page to update. And if we just go back to our pages list, we could see now that is updated. Last but not least, you can also reuse the AI prompts, those templated prompts from the MCP. So if you go to your AI settings, make sure that the MCP is enabled and that you've got the AI prompts collection. And then you can reuse these prompts over and over again. So if there are dynamic variables, Directus will ask you to fill those out. Or you know, if you don't have any variables, you could just do this and say, hey, tell me a nice dad joke. Alright. We'll see what it comes up with. Guy walks into a library, books about paranoia. She whispered, they're right behind you. Perfect. Alright. Now, onto some of the other items that you guys asked for, and I wanted to make sure that we delivered here. So now you can also control which models for the three major providers, OpenAI, Anthropic, and Google, so you can lock those down. The other big rock out of this release is going to be the OpenAI compatible provider. So as long as you have an endpoint that is OpenAI compatible, you can now go in here and set your base URL, add your API keys, you could set up your different models. Make sure you include the context limit, the output limit. You can also pass custom provider options if needed. And then you can use Ollama or, any other self hosted models, any other, OpenAI compatible models. Let's say, hey from Ollama. And this might be just a little bit slow because my MacBook is absolutely screaming at me right now. We'll fast forward. Alright. So now you can see that we've got the text back. Your mileage is gonna vary with the self hosted models, but, you know, if you've got Azure OpenAI or some other open open AI compatible endpoint that you're using, this is a great solution for you. And as always, keep the feedback coming. We love to iterate on these features, and we want to deliver real value instead of just the usual AI hype. That's it for me. Back to you, Beth. I'm here to talk through a brand new community program we're launching called Directus Builders. Builders is a community champion program for people who use Directus, want to share what they're building, and contribute to the community. Whether you're interested in sharing technical insights and receiving amplification from our social channels, joining a network of other directors users, or getting our support for your own community initiatives, this program is for you if you are using directors to build. By joining, you'll enter a private community with other experienced builders and our team. It's open to contributors, customers, partners, users, really anyone who uses Directus to build something useful. You don't need to be building something huge, you just need to be building something real. If you're the person who likes helping others figure things out, sharing what you've been learning, or creating something cool, we want to hear from you. Applications to join the first cohort are now open. If you've got any questions or you have an idea that you think might work as part of this programme, we're all ears, we want to hear it. There's a couple of ways you can get in touch with us: submit via the application form, send an email to devreldirectus. Io, or post on the community forum. All of those work and we can get talking from there. We're really excited about launching this program, we hope you will also share the excitement and want to join and we're really looking to shape the future of the program collaboratively with the builders into something that works for everyone. So if you do have ideas, thoughts, questions, please do let us know. Alright, viewers. Welcome to, yet another episode of 100 app, 100 oh, no. No. No. No. One app in ten minutes. Right? We are doing the remix version today where we have ten minutes to build and plan plan and build an amazing app clone, crazy suggestion, and I have no idea what we're gonna do. So the rules. Right? Ten minutes to plan and build. No more, no less. How we're gonna do that? We are going to use some, amazing tools that we have built into Directus. And then, rule number two, the anti rule. Use whatever you've got at your disposal. Today, I've got two awesome dudes at my disposal, mister Alvaro and Mark from our team here at Directus. No strangers to the Vue community. Welcome to the show, gents. Thanks for having us, Bryant. Thank you very much for the nice intro. Happy, to be here. Yeah. Yeah. No. I'm super excited. Have you guys given any thought to what we're what we're gonna build? I think, Mark, you have some idea though. Yeah. So yesterday, we talked a little bit. I talked with Ava what we could build and, I don't know if if I showed it to you, Brian, but on my website I have a, instead of new year's solutions, I have new year's bingo cards. So you have five by five grid of stuff I want to do in the year. And if I get at least one in a row, so diagonal or horizontal or vertical, I already have bingo and it's a success. So I don't have to do all of them. And if you go to mark.dev/bingo Okay. Let's check it out, guys. You can it's still since it's just well, now February, not a lot has happened there. But it's a it's a really nice way to actually do some of the New Year's resolution. I always get the press at the end of the year like I have done, like, a quarter of them. Yeah. I love it. Alright. So alright. This is neat, man. I I miss Yep. And each of them can be either, like, you did it or you didn't do it or it can be progressive. Like, read six books and you are, like, one books, two books, three books in. And I think I also have, like, sub tasks. If we can make that work, like, if one one, let's say, one bingo item has a few sub items as well. Like, don't have an example now, but that would also be cool. Gotcha. Okay. New Year's resolution. Bingo card generator. Alright. That's what we're doing. This is gonna be amazing. This should be fun. What color are you guys feeling? Purple, pink? I go I go purple. Blue. Or purple? Purple. There we go. Direct is purple. Nice. Direct is purple. Alright, guys. Alright. So I'm sure you've seen the show. We're gonna start the clock. We got ten minutes to plan and build this thing. Let's do it. Alright. So the first thing I usually do here is cover requirements. Right? So what are the requirements we need out of this? Right? We need to generate bingo cards. Like, what do you what were you calling those? Like, items probably or Okay. Goals. Yeah. Items. Yeah. Like a grid of of of items. Mhmm. Yeah. Alright. So we got some goals. Those are what kinda fields are you tracking on those? Just the name of the goal? Yeah. A name description and then the status. Status of the goal. Progress. Progress. Is it are you status and progress interchangeable? Yeah. I guess if you like the if the progress is under percent, the status Ah, okay. Yeah. Yeah. Yeah. Got it. Okay. And then we've got if you got goals, you got what? Items underneath the goals? We want, like, subtasks, like, if it's You you can have subtasks. Let's see if there's one that has subtasks. I don't remember. Task. It's called test. Alright. So that the task would play into into progress as well, I guess. Into goal. And then the task completed increases progress. Cool. Alright. And task needs what? Name? Description? No. Just name? Date date probably. Maybe the, the item can have a a completed ad. Yeah. They completed as well for the task for the, item on top. Yeah. Alright. And then we we wanna try to get a front end set up for this as well. Yeah. Alright. And we we need a front end to display the pingo cards. Alright. This could be a stretch in seven minutes now. Let's see how we do. Alright. So what are we using today? Right? We've got a blank directus project. We've got Claude code over here. Let's dive into it. Alright? I'm going to I'm not sure what you guys have been coding with. I've been using Super Whisper. I dig it. Alright. How are you doing? Alright, guys. We are building a New Year's resolution bingo card generator. I'm gonna copy and paste the data model that we want. You have access to a direct assistance. I want you to create our schema for that. We're also going to be building a front end to display the bingo cards. Let me know what questions you have. Let's create a plan. Alright. So this is crunching the transcript for that right now. Cool. There we go. I'll just, copy and paste this. Hopefully, we'll get some something good out of it. And we're gonna ask Claude Coad to plan. Alright. So now we've got the schema. So we've got the direct us MCP connected to this thing. And I I think you guys have had a chance to try this out already. Right? Yeah. I think Avro has. I haven't. Yeah. Play with it in the morning. It's gonna create the collections, the scheme is for you. Yeah. Alright. So it's got a fresh direction. No custom collections. Alright. And I can zoom in just a little bit more so we could see this. What is the plan? And this is probably one of my favorite parts about this thing where it will prompt you for questions. Direct us flow, that's what we wanna do there. Vanilla JS. Yeah. That's what we'll do. What do you guys think? Five by five grid? Four by four? We we can do also four by four so we don't have to come up with 25 things. Amazing. Right? We got five minutes left. You you can say to the MCP, hey, cloud, get, your twenty twenty six, bingo Oh, that was cool. Yeah. Yeah. Alright. Public read, that's fine. Anyone can view those. Cool. Alright. And now, hopefully, this thing should have a plan. I wonder which resolutions Cloud Cove could have. I don't know. Let's see. We'll we'll spin that up in an in a new find out. Alright. Cool. Right? Here's the direct to schema. There's our it's gonna create a flow. It's gonna create the front end. Sounds good. Let's let's roll with it. Right? I don't know what we're actually doing other than just talking this through here, but, I'm curious to see just how this thing works. I've you know, of course, like, spent a ton of time testing and building the MCP, but I've not spent a ton of time using it with the the latest Opus four five model. Alright. So it is checked the existing schema. Now we are it should start implementing. Yes. Please just start jamming on here. And if I refresh, now we should see some collections start to come in to the direct instance. We should see some collections. Start to come into the direct instance. There we go. Okay. Alright. Oh, nice. I was just worried that I did something wrong. So we got our goals. We got our tasks. Amazing. Right? Now I could go in. We could potentially create some new ones if we need. One of the things that I like about this is it, like it seems like the anthropic models do a better job of, like, actually putting together a cohesive form than than, like, the OpenAI ones. So it's going through creating relations and fields. Alright, guys. So in this other one, create, some New Year's resolutions for yourself, Claude. Alright. You guys have any more guidance for this thing? They should follow this the smart principle, probably. Follow the smart principle. What's the smart principle? Now you got me. So it's like measurable, achievable. I know what you're talking about now. Yeah. The smart goals. Yeah. Yeah. Yeah. And include the add them to the goals and tasks inside. For the for me, the most important one is always measurable. You have to be able to measure what you do. If not, you lose yourself. You lose yourself. That's so funny. That is very poetic. I love it, man. Alright. So it looks like okay. Yeah. I was just making sure we've got the relationship created correctly there. Alright. It is going to so we got two claws going. We got two minutes here. Let's see. I can see their goals and tasks. Alright. This is the next development, man. Right? This is the next development. Yeah. This thing is going to yeah. I need to enter YOLO mode so we can actually have this thing not stop to do these calls. But, behind the scenes, right, it is building this progress calculator flow. And and flows are Sure. A a nice piece of functionality. It can be a little time consuming to set up, like, complex flows via the UI. So having direct us put these together, is, yeah, definitely time saving. Right? That's probably, like, five, ten steps there. Yes. Create those items. Alright. Let's see what we've got. Are we gonna get to the front end for this thing? I don't know if we are, man. I should've had Bryant. Should've had, Claude do that first. It's connecting the operations. Claude, you need to go faster, my friend. Alright. So what are the what are the goals that Claude set for itself? This should be interesting. Put that description statement. I'll reduce average response latency by 20%. Achieve 95% task completion rate without clarification. What an interesting goal. Here's the the individual tasks. And, oh, and that was done there. The HTML. The front end. Now it's doing it. No. Let me open this test project up. Is it going to have enough time? Yes. Proceed. New Year's resolution. Bingo. Oh, no. We ran out of time. It's so close. MCP connection should have access. No need to set up. I think, you know, this was so close, guys. I'm just going to it's against the rules, but you know what? We can make up our own rules here. I am just going to give access here to see and see if this will actually finish. Of course. There it is, man. The API permissions got us. We could see the bingo card here. There's the individual task. Ten minutes, full working back end with permissions, so close to a working front end. It did pretty cool. This is this is very cool. Right? Even even with the subtask because that that wasn't an extra thing. Like, now it's the only iteration. Like, put the progress in the front end and Yeah. I'm very curious to see. Right? It's already got it looks like it maybe did it miss some of the flows? Right? So the thing to take away here is obviously, like, you could build incredibly quickly with Directus and MCP, and this is not loading, probably because of my computer. Just hates running all these Docker containers locally. What is going on? How many do you have? There's probably, like, five or 10 running at the moment, like, different instances. And I'm sure if I, like, killed the camera, it would probably stop doing this. I don't I don't know what's going on here. Local host 8055. I at least want to end this episode on a high note and show something. Come on. Alright. So we could see the flows. Did they yeah. It actually connected the flow. So I'm just curious. Right. Just wanting to see. Right? Build a mastering five new programming frameworks. Let's say we completed this right now. Does this flow actually work? And So it it it could increase the progress of the task of the goal. It should. It should. And, of course, doing a hard refresh here is not not a great idea. Alright. Well, gents, you know, I'm not sure whether to put a, like, a thumbs up stamp on this one. Thumbs down stamp. So we just do I think yeah. This was, we we got most of the functionality here. We just didn't get, the front end all the way there. Oh, Brian, you are lagging quite Of course, I did. Yeah. Because it does I think you you get a a thumbs up, Brian, because it we got a working thing at the end, and you had the the grid showing everything with the progress. So I think you get a thumbs up. Yeah. Alright, guys. My computer is struggling. So we are going to sign off for this episode. Mark Alvaro, I've heard a little rumor that there might be a podcast coming up, so I'm super excited for that. Thanks for joining me for this episode of one app in ten minutes. We want to take a moment towards the end of the change log for thanking our amazing community contributors who give their time to improve the director's project. In January, we had 14 contributors, and so we'd like to say a huge thank you to Oscar for removing the deprecated webhooks functionality across the stack, Abdullah for removing the comment tab from the activities page, Thomas for adding concurrency control for file uploads via a new files max upload concurrency environment variable, 'kiki' for fixing an issue that would cause some draw header icons from being displayed too large, 'pancaj' for fixing incorrect initial slider fill position when the midpoint is not a valid stepped value, and for fixing markdown editor layout when a minimum input height is applied. VDR for fixing sticky column background in many to many list interface. Fan for improving system permissions collection picker to support easier multi selection. Ty for replacing the local use local storage composable with the view use equivalent, Daniel for disabling text highlighting for druggable view elements in Chrome and Firefox, Clint for fixing permission cache to respect cache system TTL, Bruno for fixing conversion of fields from object notation to dot syntax in SDK subscription queries, Arthur for fixing an issue where the Supabase storage driver would fail if the root folder is the empty string, and Joseph for adding support for specifying a KMS key ID in s three storage when using AWS KMS server side encryption. Thank you again to these individuals. You can see their specific pull inside of the full release notes on GitHub. Lastly, we also want to take the time to thank our GitHub Sponsors of January who financially contribute to Directus' development. Thank you to Wayfan, Mike, Fergus, Omar, Marcus, Mission Control, Utomic, Steven, James, Manuel, Andreas, John, Burb, Adam, Jason, Yuya, Valentino, Jens and Wayne. The money we are given from our GitHub sponsors goes straight back to community members who build tooling and extensions for the director's ecosystem. Thank you again for being part of that. Alright, that is it for this month's changelog, if you are still here still watching thank you very much for spending the time with us. If you have any questions head on over to the directors forum, have a great rest of your day and see you soon.","73bc207d-4411-4b34-8a99-3ace5581711e",[417,418],"ca7b298d-cfce-4a0a-a467-352f31bd3140","12d14e99-9340-4084-9bce-25e042471e7d",[],{"id":133,"number":134,"show":122,"year":135,"episodes":421},[137],{"reps":423},[424,480],{"name":425,"sdr":8,"link":426,"countries":427,"states":429},"John Daniels","https://meet.directus.io/meetings/john2144/john-contact-form-meeting",[428],"United States",[430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479],"Michigan","Indiana","Ohio","West Virginia","Kentucky","Virginia","Tennessee","North Carolina","South Carolina","Georgia","Florida","Alabama","Mississippi","New York","MI","IN","OH","WV","KY","VA","TN","NC","SC","GA","FL","AL","MS","NY","Connecticut","CT","Delaware","DE","Maine","ME","Maryland","MD","Massachusetts","MA","New Hampshire","NH","New Jersey","NJ","Pennsylvania","PA","Rhode Island","RI","Vermont","VT","Washington DC","DC",{"name":481,"link":482,"countries":483},"Michelle Riber","https://meetings.hubspot.com/mriber",[484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,461,672,673],"Albania","ALB","Algeria","DZA","Andorra","AND","Angola","AGO","Austria","AUT","Belgium","BEL","Benin","BEN","Bosnia and Herzegovina","BIH","Botswana","BWA","Bulgaria","BGR","Burkina Faso","BFA","Burundi","BDI","Cameroon","CMR","Cape Verde","CPV","Central African Republic","CAF","Chad","TCD","Comoros","COM","Côte d'Ivoire","CIV","Croatia","HRV","Czech Republic","CZE","Democratic Republic of Congo","COD","Denmark","DNK","Djibouti","DJI","Egypt","EGY","Equatorial Guinea","GNQ","Eritrea","ERI","Estonia","EST","Eswatini","SWZ","Ethiopia","ETH","Finland","FIN","France","FRA","Gabon","GAB","Gambia","GMB","Ghana","GHA","Greece","GRC","Guinea","GIN","Guinea-Bissau","GNB","Hungary","HUN","Iceland","ISL","Ireland","IRL","Italy","ITA","Kenya","KEN","Latvia","LVA","Lesotho","LSO","Liberia","LBR","Libya","LBY","Liechtenstein","LIE","Lithuania","LTU","Luxembourg","LUX","Madagascar","MDG","Malawi","MWI","Mali","MLI","Malta","MLT","Mauritania","MRT","Mauritius","MUS","Moldova","MDA","Monaco","MCO","Montenegro","MNE","Morocco","MAR","Mozambique","MOZ","Namibia","NAM","Niger","NER","Nigeria","NGA","North Macedonia","MKD","Norway","NOR","Poland","POL","Portugal","PRT","Republic of Congo","COG","Romania","ROU","Rwanda","RWA","San Marino","SMR","São Tomé and Príncipe","STP","Senegal","SEN","Serbia","SRB","Seychelles","SYC","Sierra Leone","SLE","Slovakia","SVK","Slovenia","SVN","Somalia","SOM","South Africa","ZAF","South Sudan","SSD","Spain","ESP","Sudan","SDN","Sweden","SWE","Tanzania","TZA","Togo","TGO","Tunisia","TUN","Uganda","UGA","United Kingdom","GBR","Vatican City","VAT","Zambia","ZMB","Zimbabwe","ZWE","UK","Germany","Netherlands","Switzerland","CH","NL",1773850413793]