<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel><title>Pulumi Blog: User experience</title><link>https://www.pulumi.com/blog/tag/user-experience/</link><description>Pulumi blog posts: User experience.</description><language>en-us</language><pubDate>Wed, 17 Dec 2025 00:00:00 +0000</pubDate><item><title>Introducing Dark Mode for Pulumi Cloud</title><link>https://www.pulumi.com/blog/pulumi-cloud-dark-mode/</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-cloud-dark-mode/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-cloud-dark-mode/index.png" /&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/pulumi-cloud/"&gt;Pulumi Cloud&lt;/a&gt; helps teams manage and operate their cloud infrastructure in one place, from state and secrets to deployments, visibility, and policy enforcement.&lt;/p&gt;
&lt;p&gt;For a long time, one request has consistently come up from the Pulumi community: dark mode. Today, we’re announcing that this request is now available in Pulumi Cloud.&lt;/p&gt;
&lt;h2 id="light-mode-and-dark-mode"&gt;Light mode and dark mode&lt;/h2&gt;
&lt;p&gt;Pulumi Cloud supports light mode and dark mode. You can switch themes at any time from the utility bar.&lt;/p&gt;
&lt;h3 id="below-pulumi-cloud-dashboard-in-light-mode-and-dark-mode"&gt;Below: Pulumi Cloud dashboard in light mode and dark mode&lt;/h3&gt;
&lt;div class="flex flex-col md:flex-row gap-4 my-4"&gt;
&lt;img src="dashboard-light.png" alt="Screenshot of Pulumi Cloud dashboard in light mode" class="w-full md:w-1/2" /&gt;
&lt;img src="dashboard.png" alt="Screenshot of Pulumi Cloud dashboard in dark mode" class="w-full md:w-1/2" /&gt;
&lt;/div&gt;
&lt;p&gt;Light mode remains the default experience. Dark mode uses lighter text and UI elements on a darker background, which many users prefer for extended sessions or low-light environments.&lt;/p&gt;
&lt;p&gt;This update is enabled by recent work from our User Experience team to introduce a shared design system across Pulumi Cloud. With that foundation in place, theming can now be applied consistently across pages and features.&lt;/p&gt;
&lt;h3 id="below-pulumi-cloud-resources-page-in-light-mode-and-dark-mode"&gt;Below: Pulumi Cloud resources page in light mode and dark mode&lt;/h3&gt;
&lt;div class="flex flex-col md:flex-row gap-4 my-4"&gt;
&lt;img src="resources-light.png" alt="Screenshot of Pulumi Cloud Resources page in light mode" class="w-full md:w-1/2" /&gt;
&lt;img src="resources.png" alt="Screenshot of Pulumi Cloud Resources page in dark mode" class="w-full md:w-1/2" /&gt;
&lt;/div&gt;
&lt;p&gt;Dark mode allows you to opt into a theme that uses lighter text and graphics on a darker background. You can also choose to keep the current theme, now known as light mode.&lt;/p&gt;
&lt;h2 id="how-to-enable-dark-mode"&gt;How to enable dark mode&lt;/h2&gt;
&lt;p&gt;You can update your theme from the utility bar at any time.&lt;/p&gt;
&lt;p&gt;&lt;img src="darktoggle.png" alt="Screenshot of dark mode toggle in utility bar"&gt;&lt;/p&gt;
&lt;h2 id="try-out-dark-mode-today"&gt;Try out dark mode today&lt;/h2&gt;
&lt;p&gt;Want to try dark mode out for yourself? &lt;a href="https://app.pulumi.com"&gt;Sign in&lt;/a&gt; to your Pulumi Cloud account, or if you are new to Pulumi, &lt;a href="https://app.pulumi.com/signup"&gt;create a free account&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We would love to hear your feedback. You can reach us in the &lt;a href="https://slack.pulumi.com/?_gl=1*abbv2y*_ga*MTgxNzE0MTI3LjE2NDM3MzcwNTU.*_ga_FQHG5CVY2D*MTY1NzY0ODc4NC4xMzMuMC4xNjU3NjQ4Nzg0LjYw"&gt;Pulumi Community Slack&lt;/a&gt; or share requests in the &lt;a href="https://github.com/pulumi/pulumi-cloud-requests/issues"&gt;public GitHub repo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We look forward to hearing what you think of these changes!&lt;/p&gt;</description><author>Kimberley Mackenzie</author><author>Tom King</author><category>pulumi-cloud</category><category>user-experience</category></item><item><title>Policy Comes to Team and Enterprise, with New Out-of-the-box Policies and Management Experience</title><link>https://www.pulumi.com/blog/pulumi-policy-mgmt-launch/</link><pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-policy-mgmt-launch/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-policy-mgmt-launch/index.png" /&gt;
&lt;p&gt;Pulumi’s Infrastructure as Code has included a powerful policy engine from day one. Over the past year, we’ve been enhancing it significantly to provide stronger governance for modern cloud platforms. Until now, these capabilities were limited to our Business Critical tier. Today, we’re excited to announce that &lt;a href="https://www.pulumi.com/docs/insights/policy-as-code/"&gt;policy guardrails&lt;/a&gt; are now available to all Team and Enterprise customers. Alongside this, we’re launching a redesigned policy management experience and introducing out-of-the-box policy packs that make it easier than ever to secure, govern, and optimize your cloud environments—even when powered by AI agents like &lt;a href="https://www.pulumi.com/blog/pulumi-neo/"&gt;Pulumi Neo&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="policy-as-guardrails-for-ai-infrastructure"&gt;Policy as Guardrails for AI Infrastructure&lt;/h2&gt;
&lt;p&gt;As developer velocity accelerates, AI agents like Neo are helping teams create and manage infrastructure at unprecedented speed. That speed creates a governance challenge: how do you ensure security, compliance, and cost-effectiveness without slowing developers down?&lt;/p&gt;
&lt;p&gt;Policy guardrails provide the answer. Pulumi’s Policy as Code (PaC) framework applies DevOps best practices to governance, letting you codify rules, test them through pull requests, and version them alongside your infrastructure. With policies in place, you can ensure that every change stays within your organization’s standards, whether it is a human developer or Neo making a change.&lt;/p&gt;
&lt;h2 id="what-makes-pulumi-policy-different"&gt;What Makes Pulumi Policy Different&lt;/h2&gt;
&lt;p&gt;Unlike many other policy solutions, Pulumi Policy uses general-purpose programming languages such as TypeScript and Python rather than restrictive DSLs or YAML. This unlocks richer and more flexible capabilities, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conditional logic&lt;/strong&gt; to codify your organization&amp;rsquo;s nuanced rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reusable functions and abstractions&lt;/strong&gt; to create a shared library of policies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unit tests&lt;/strong&gt; to validate policy behavior before rollout.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With today’s updates, this foundation is easier to adopt and scale across your teams than ever before.&lt;/p&gt;
&lt;h2 id="new-simplified-experience"&gt;New Simplified Experience&lt;/h2&gt;
&lt;p&gt;While Pulumi Policy has always allowed you to enforce compliance using TypeScript and Python, the existing workflow could be cumbersome—discovering policies required switching between the console and CLI, and applying them involved multiple steps.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve removed that friction to provide the seamless guardrails needed for this high-velocity, AI-driven world. The new experience is built around a streamlined, in-console workflow for discovering, applying, and managing your policies.&lt;/p&gt;
&lt;h3 id="in-console-discoverability"&gt;In-Console Discoverability&lt;/h3&gt;
&lt;p&gt;We are making it easier to find and understand policy packs. You can now browse a rich set of pre-built policy packs directly within the Pulumi Cloud console—no CLI or context switching required.&lt;/p&gt;
&lt;p&gt;You’ll find:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A rich browsing experience:&lt;/strong&gt; See all available policy packs in one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detailed information:&lt;/strong&gt; Each pack comes with a clear description of the policies included.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Organization-approved packs:&lt;/strong&gt; Org admins can curate a list of approved policy packs, ensuring your teams—and AI agents like Neo—are using a vetted set of policies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="new-pre-built-policy-packs"&gt;New Pre-Built Policy Packs&lt;/h3&gt;
&lt;p&gt;To help you establish guardrails immediately, we have authored several &lt;a href="https://www.pulumi.com/docs/insights/pre-built-packs/"&gt;pre-built policy packs&lt;/a&gt;. We are excited to highlight two that are available today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pulumi Best Practices:&lt;/strong&gt; A foundational set of recommended governance and security controls that serves as a strong starting point for any organization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HITRUST CSF v11.5:&lt;/strong&gt; Provides predefined controls that help align cloud resources with HITRUST CSF requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="streamlined-policy-management-and-application"&gt;Streamlined Policy Management and Application&lt;/h3&gt;
&lt;p&gt;The new policy management experience dramatically simplifies policy application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Intuitive Interface:&lt;/strong&gt; Browse, select, and apply policies through a streamlined workflow using &lt;strong&gt;Policy Groups&lt;/strong&gt; to bundle related policies and apply them to your stacks or cloud accounts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expanded Scale:&lt;/strong&gt; We&amp;rsquo;ve eliminated the 4,000 stack UI limit on policy groups, allowing you to scale policies across your entire infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Granular Enforcement:&lt;/strong&gt; Configure the enforcement level (&lt;code&gt;advisory&lt;/code&gt; or &lt;code&gt;mandatory&lt;/code&gt;) for policies to either warn developers or block non-compliant deployments entirely.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="preventative-and-audit-approaches"&gt;Preventative and Audit Approaches&lt;/h3&gt;
&lt;p&gt;Pulumi Policy supports two complementary approaches to governance.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preventative policies&lt;/strong&gt;: Block non-compliant deployments during &lt;code&gt;pulumi up&lt;/code&gt;, providing real-time guardrails for developers and AI agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit policies&lt;/strong&gt;: Continuously scan existing resources for ongoing compliance monitoring, giving you a complete picture of your cloud security posture.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This dual approach ensures new deployments meet standards while maintaining visibility across your entire infrastructure. Learn more in our &lt;a href="https://www.pulumi.com/docs/insights/preventative-vs-audit-policies/"&gt;Preventative vs. Audit Policies&lt;/a&gt; guide.&lt;/p&gt;
&lt;h2 id="how-to-get-started"&gt;How to Get Started&lt;/h2&gt;
&lt;p&gt;Getting started with the new policy management experience is straightforward:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Browse Policy Packs:&lt;/strong&gt; Navigate to the Policies tab in your Pulumi Cloud console to discover pre-built policy packs like Pulumi Best Practices and HITRUST CSF. Learn more about &lt;a href="https://www.pulumi.com/docs/insights/policy-as-code/"&gt;Policy as Code&lt;/a&gt; configuration and setup.
&lt;img src="policy-management-1.png" alt="Policy Packs Browser"&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose Your Approach:&lt;/strong&gt; Decide whether you need preventative policies (to block non-compliant deployments during &lt;code&gt;pulumi up&lt;/code&gt;) or audit policies (for continuous compliance monitoring across all cloud resources).
&lt;img src="policy-management-3.png" alt="Preventative Policy Overview"&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create Policy Groups:&lt;/strong&gt; Set up policy groups to bundle related policies and apply them to your stacks or cloud accounts.
&lt;img src="policy-management-4.png" alt="Policy Group Configuration"&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configure Enforcement:&lt;/strong&gt; Set enforcement levels (advisory, mandatory, or remediate) for each policy based on your requirements.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="now-available-to-team-and-enterprise-customers"&gt;Now Available To Team and Enterprise Customers&lt;/h2&gt;
&lt;p&gt;To ensure every organization can build with confidence, these policy management enhancements and the &lt;code&gt;pulumi-best-practices&lt;/code&gt; policy packs are &lt;strong&gt;now available to Team and Enterprise customers&lt;/strong&gt;. Checkout our &lt;a href="https://www.pulumi.com/pricing"&gt;pricing&lt;/a&gt; page for more information.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Governance doesn’t need to be a roadblock—it can be a foundation that accelerates innovation. With enhanced policy management and ready-to-use guardrails, Pulumi helps your teams and AI agents like Neo move fast while staying secure, compliant, and cost effective.&lt;/p&gt;
&lt;p&gt;Try the new experience in Pulumi Cloud today, and let us know what you think in the &lt;a href="https://slack.pulumi.com/"&gt;Pulumi Community Slack&lt;/a&gt;.&lt;/p&gt;</description><author>Luke Ward</author><author>Dan Biwer</author><author>Alejandro Cotroneo</author><category>pulumi-cloud</category><category>policy-as-code</category><category>crossguard</category><category>features</category><category>user-experience</category><category>pulumi-neo</category><category>ai</category></item><item><title>Run Pulumi with Any TypeScript Version</title><link>https://www.pulumi.com/blog/typescript-versions/</link><pubDate>Tue, 16 Apr 2024 10:28:28 +0200</pubDate><guid>https://www.pulumi.com/blog/typescript-versions/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/typescript-versions/index.png" /&gt;
&lt;p&gt;Pulumi allows you to use the best features of programming languages to build your infrastructure while ensuring compatibility with your current development environments. To this end Pulumi provides a seamless experience when authoring TypeScript programs, managing the compilation of your program for you. With the latest release of our Node.js SDK, we&amp;rsquo;ve made this even more flexible by making it easier than ever to choose the version of TypeScript you want to use.&lt;/p&gt;
&lt;p&gt;Each new release of TypeScript comes with new features and improved type checking, as well as support for the latest JavaScript features. Using the latest version of TypeScript provides you with the maximum flexibility for creating types and gives you more confidence that your program will behave as expected.&lt;/p&gt;
&lt;p&gt;Until now, Pulumi&amp;rsquo;s seamless experience was limited to using Pulumi&amp;rsquo;s builtin TypeScript version 3.8. If you wanted to use a more recent version, you had to introduce a build step to your project and let Pulumi run in &lt;a href="https://www.pulumi.com/docs/languages-sdks/javascript/#disabling-built-in-typescript-support"&gt;plain Javascript mode&lt;/a&gt;. With the release of the &lt;a href="https://www.npmjs.com/package/@pulumi/pulumi"&gt;Pulumi Node.js SDK 3.113.0&lt;/a&gt; you can now use any version of TypeScript by adding it as a dependency to your project&amp;rsquo;s &lt;code&gt;package.json&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Pulumi supports all TypeScript versions from 3.8 and up, including &lt;a href="https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-4.html"&gt;TypeScript 5.4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you have an existing project, you can upgrade your project to the latest versions of TypeScript and Pulumi by running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm add typescript@^5.4.5 @pulumi/pulumi@^3.113.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We have also updated our &lt;a href="https://github.com/pulumi/templates"&gt;Pulumi templates&lt;/a&gt; to include the latest version of TypeScript. To create a new project, run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi new
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Adding TypeScript as a dependency to your project is optional, as TypeScript and ts-node are optional peer dependencies of the Node.js SDK. This makes it easy to use a single version of TypeScript or ts-node within monorepos. To ensure backward compatibility, Pulumi ships with bundled versions of TypeScript 3.8 and ts-node 7, and falls back to these versions if they are not installed in your project&amp;rsquo;s node modules.&lt;/p&gt;
&lt;h2 id="example"&gt;Example&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s show an example of how to use one of TypeScripts&amp;rsquo;s new features with Pulumi. TypeScript 4.1 introduced &lt;a href="https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html"&gt;Template Literal Types&lt;/a&gt;, which allow you to build types using template literals. Imagine you wanted to enforce that names of S3 buckets are all lower case and always start with a given prefix. Of course you can check this at runtime, but with Template Literal Types this can be enforced during typechecking.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;prefix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sb"&gt;`acme_corp`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;BucketName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Lowercase&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can create a custom Bucket subclass that expects a name matching our new &lt;code&gt;BucketName&lt;/code&gt; type.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;pulumi&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/pulumi&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/aws&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;prefix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sb"&gt;`acme_corp`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;BucketName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Lowercase&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;AcmeCorpBucket&lt;/span&gt; &lt;span class="kr"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;: &lt;span class="kt"&gt;BucketName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args?&lt;/span&gt;: &lt;span class="kt"&gt;aws.s3.BucketArgs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;opts?&lt;/span&gt;: &lt;span class="kt"&gt;pulumi.CustomResourceOptions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;opts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myBucketWrong&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AcmeCorpBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;MyBucket&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ❌ Fails typechecking with: Argument of type &amp;#39;&amp;#34;MyBucket&amp;#34;&amp;#39; is not assignable to parameter of type &amp;#39;`acme_corp_${Lowercase&amp;lt;string&amp;gt;}`&amp;#39;.ts(2345)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myBucketWrongAgain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AcmeCorpBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;acme_corp_MyBucket&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ❌ Fails typechecking with: Argument of type &amp;#39;&amp;#34;acme_corp_MyBucket&amp;#34;&amp;#39; is not assignable to parameter of type &amp;#39;`acme_corp_${Lowercase&amp;lt;string&amp;gt;}`&amp;#39;.ts(2345)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myBucketCorrect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AcmeCorpBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;acme_corp_my_bucket&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ✅ Passes typechecking
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This example shows just one of &lt;a href="https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-4.html"&gt;Typescript&amp;rsquo;s many new features&lt;/a&gt; that have shipped since version 3.8, and now all are available for you to use in your Pulumi programs without jumping through hoops.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We recently shipped improved support for &lt;a href="https://www.pulumi.com/blog/nx-monorepo/"&gt;Node.js monorepos&lt;/a&gt;, and with the latest version of the Pulumi Node.js SDK, we further improved how Pulumi integrates into your development environment by letting you easily pick the version of TypeScript to use.&lt;/p&gt;</description><author>Julien Poissonnier</author><category>typescript</category><category>nodejs</category><category>user-experience</category></item><item><title>The New and Improved Pulumi Service console</title><link>https://www.pulumi.com/blog/new-improved-pulumi-service-console/</link><pubDate>Mon, 29 Aug 2022 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/new-improved-pulumi-service-console/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/new-improved-pulumi-service-console/index.png" /&gt;
&lt;p&gt;The &lt;a href="https://www.pulumi.com/product/pulumi-service/"&gt;Pulumi Service&lt;/a&gt; is the easiest way to use Pulumi’s open source, universal infrastructure as code SDK at scale and provides a fully managed experience. It handles infrastructure state and secrets, sets up SAML SSO, integrates with CI/CD pipelines, and enforces compliance rules.&lt;/p&gt;
&lt;p&gt;It’s been nearly four years since the Pulumi Service launched back in 2018. In these last four years, our customer base has grown significantly and as a result, the Service’s features and capabilities have grown with it.&lt;/p&gt;
&lt;p&gt;We’ve added features like &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/audit-logs/"&gt;audit logs&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/saml/"&gt;SAML SSO&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/scim/"&gt;SCIM&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/teams/"&gt;Teams&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/organization-access-tokens/"&gt;Organization&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/team-access-tokens/"&gt;Team Access Tokens&lt;/a&gt;, and much more! But throughout all these changes, the look and feel of the Service has largely stayed the same—until now! Today we’re excited to launch a set of improvements to the overall user experience of the Pulumi Service. These updates include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Increased organizational insights on the Service Dashboard&lt;/li&gt;
&lt;li&gt;Quick access to stacks with a new Stack Favorites feature&lt;/li&gt;
&lt;li&gt;Easier navigation around the Service with a new left navigation pane&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These changes came directly from consultation with our users and we&amp;rsquo;ve spent time with customers in the past few weeks refining it. One of these customers was &lt;a href="https://dutchie.com"&gt;dutchie&lt;/a&gt;, an all-in-one technology platform powering the cannabis industry with Point of Sale, Ecommerce, Payments, and more. &amp;ldquo;The new Pulumi Service console is a change we are really excited to see, literally. It has better use of white space and an improved balance of information on the Dashboard at the same time and that shows a real and welcome focus on user experience. It is a genuine quality of life improvement in a portion of the product that we use daily.&amp;rdquo; said Jordan Rinke, Infrastructure Architect at dutchie.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/S_i6etgwKR4?rel=0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Want to try these features out for yourself? &lt;a href="https://app.pulumi.com"&gt;Sign in&lt;/a&gt; to your Pulumi Service account or if you are new to Pulumi, &lt;a href="https://app.pulumi.com/signup"&gt;create a free account&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="increased-organizational-insights-on-the-service-dashboard"&gt;Increased organizational insights on the Service Dashboard&lt;/h2&gt;
&lt;p&gt;&lt;img src="dashboard.png" alt="&amp;ldquo;Screenshot of an Organization&amp;rsquo;s Dashboard in the Pulumi Service console&amp;rdquo;"&gt;&lt;/p&gt;
&lt;p&gt;Lastly, we’ve made significant changes to the Pulumi Service dashboard. Now you can access more information to help survey your operations at a glance.&lt;/p&gt;
&lt;p&gt;Organizations can access some quick usage statistics at the top of their dashboards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Member count and +/- change in the past week&lt;/li&gt;
&lt;li&gt;Total stack count and percent change in the past week&lt;/li&gt;
&lt;li&gt;Total resource count and percent change in the past week&lt;/li&gt;
&lt;li&gt;Number of successful updates in the past day, week, month, and year&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="dashboard-quick-stats.png" alt="&amp;ldquo;Screenshot of the new quick stats bar on the Dashboard&amp;rdquo;"&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re part of an organization, you&amp;rsquo;ll also see a “Members” card that tracks recently joined members. If you&amp;rsquo;re an admin, you can manage any pending invites from this card.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve also exposed more operation updates in the “Latest Stack Activity” card. You can see up to ten most recent updates and favorite those stacks directly from the dashboard card.&lt;/p&gt;
&lt;p&gt;&lt;img src="members-stack-activity-cards.png" alt="&amp;ldquo;Members card on the Dashboard&amp;rdquo;"&gt;&lt;/p&gt;
&lt;h2 id="quick-access-to-stacks-with-a-new-stack-favorites-feature"&gt;Quick access to stacks with a new Stack Favorites feature&lt;/h2&gt;
&lt;p&gt;Many Pulumi users have access to dozens of hundreds of stacks. But only a few of those stacks may require regular interaction. We&amp;rsquo;ve introduced a new Stack Favorites feature to let you flag the stacks that are most important. This way you can access those stacks from anywhere in the Service.&lt;/p&gt;
&lt;p&gt;Your favorites list is your own. Even if you&amp;rsquo;re part of an organization, your favorites won&amp;rsquo;t be shared with anyone other than you. And you can have as many favorites as you like!&lt;/p&gt;
&lt;p&gt;Look for the star icon next to any stack name and select it to start building your favorites list.&lt;/p&gt;
&lt;p&gt;&lt;img src="stack-navigation.png" alt="&amp;ldquo;Stack Favorites in the left navigation&amp;rdquo;"&gt;&lt;/p&gt;
&lt;p&gt;You can access the favorites list from two key locations in the Service: the left navigation pane and the dashboard. All your favorites will appear in the navigation pane under the “Stacks” heading. You&amp;rsquo;ll also have your list of favorites in a new dashboard card.&lt;/p&gt;
&lt;p&gt;&lt;img src="stacks-navigation-favorites-card.png" alt="&amp;ldquo;Stack Favorites card on Dashboard and the left navigation&amp;rdquo;"&gt;&lt;/p&gt;
&lt;h2 id="easier-navigation-around-the-service-with-a-new-left-navigation-pane"&gt;Easier navigation around the Service with a new left navigation pane&lt;/h2&gt;
&lt;p&gt;Among the biggest changes to the feel of the Service is our new left navigation pane. Navigation items like your Dashboard, Stacks, and Settings are accessible in the new pane from anywhere in the Service.&lt;/p&gt;
&lt;p&gt;&lt;img src="dashboard-nav-expanded.png" alt="&amp;ldquo;Screenshot of Dashboard with left nav bar expanded&amp;rdquo;"&gt;&lt;/p&gt;
&lt;p&gt;The navigation pane consolidates actions and information so it&amp;rsquo;s easy for you to find common items. You&amp;rsquo;ll find options in the pane to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Switch between your individual account and any other organizations you&amp;rsquo;re part of&lt;/li&gt;
&lt;li&gt;Create new organizations&lt;/li&gt;
&lt;li&gt;Access Stack Favorites&lt;/li&gt;
&lt;li&gt;Directly access sub-pages like Billing or Access Tokens&lt;/li&gt;
&lt;li&gt;Send us your feedback!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These changes will help you move through the Pulumi Service without losing your place and to ensure convenient access to key pages. You can even collapse the navigation pane for more screen real estate and still access any page you need.&lt;/p&gt;
&lt;p&gt;&lt;img src="dashboard-nav-collapsed.png" alt="&amp;ldquo;Screenshot of Dashboard with left nav bar collapsed&amp;rdquo;"&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re looking for your account details, they have moved into the black utility toolbar. To access your account settings or logout of the Pulumi Service, select your profile image at the top right of your browser window.&lt;/p&gt;
&lt;h2 id="try-out-the-pulumi-service-today"&gt;Try out the Pulumi Service today&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;d love for you to try out the new and improved Pulumi Service console! Don&amp;rsquo;t hesitate to reach out on the &lt;a href="https://slack.pulumi.com/?_gl=1*abbv2y*_ga*MTgxNzE0MTI3LjE2NDM3MzcwNTU.*_ga_FQHG5CVY2D*MTY1NzY0ODc4NC4xMzMuMC4xNjU3NjQ4Nzg0LjYw"&gt;Pulumi Community Slack&lt;/a&gt; about any thoughts and feelings you have about these changes or any and all things Pulumi! We also have a &lt;a href="https://github.com/pulumi/pulumi-cloud-requests/issues"&gt;public GitHub repo&lt;/a&gt; to track any requests related to the Service.&lt;/p&gt;
&lt;p&gt;These changes wouldn’t be possible without the users who generously gave their time to have a conversation with us. We&amp;rsquo;ll continue to translate user feedback into a better Pulumi experience.&lt;/p&gt;
&lt;p&gt;We look forward to hearing what you think of these changes!&lt;/p&gt;</description><author>Meagan Cojocar</author><category>pulumi-cloud</category><category>user-experience</category></item></channel></rss>