Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
146725 stories
·
33 followers

Microsoft stock is flat the day after sinking 10%. Here’s why

1 Share

Investors are missing the big picture with Microsoft, says Alliance Bernstein's Jim Tierney

Microsoft’s stock was largely flat on Friday, after the stock saw its biggest daily decline since 2020, sliding 10% Thursday after it reported earnings.

Shares fell despite the company’s second-quarter earnings beating analyst revenue expectations.

Like other hyperscalers, Microsoft has invested huge sums in its AI infrastructure buildout. But Meta reported huge AI spending on the same day and its stock jumped 8%.

Why did Microsoft’s stock drop?

Investors latched onto the growth of Microsoft’s cloud computing platform Azure and other cloud services, which came in at 39% below StreetAccount’s 39.4% consensus. Those areas saw 40% growth in the fiscal first quarter.

The company’s CFO Amy Hood said that the cloud business’ results could have been higher if the company had allocated more data center infrastructure to customers rather than prioritising in-house needs.

Implied operating margin for third-quarter also came up short, with Microsoft calling for about $12.6 billion in revenue from the More Personal Computing segment that includes Windows, which was lower than StreetAccount’s $13.7 billion consensus.

What analysts are saying

In a post-earnings note on Thursday, Barclays analyst Raimo Lenschow said most investors focused solely on Azure growth to judge the health of Microsoft’s business, especially in its performance around AI.

“It now looks like the company will not really accelerate Azure further from here, due to the law of large numbers and extra capacity being used for its own, higher-margin, first party offerings like Co-Pilot and its own AI R&D efforts,” he said.

“Investors need, we believe, to understand that management made a cognizant decision to focus on what is best for the company long term rather than driving the stock up this quarter or even over last quarter and a few quarters to come (as capacity constraints likely abate),” Mark L. Moerdler, analyst at Bernstein said in a Thursday note.

There was still plenty of bullishness in the market for Microsoft stock. Wells Fargo, in a Thursday note, rated shares as overweight, adding that its “early AI lead and strong incumbent position in a tight market” justify its high trading price.

Read the whole story
alvinashcraft
45 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Introducing Bindable Property Source Generators

1 Share

I am excited to announce two new source generators introduced in CommunityToolkit.Maui v14.0.0 :

  • [BindableProperty]
  • [AttachedBindableProperty<T>]

These new source generators make it easier than ever to create a BindableProperty in your .NET MAUI apps. In fact, all Bindable Properties in CommunityToolkit.Maui are now automatically generated using these new source generators.

Using these attributes, the .NET MAUI Community Toolkit will generate all of the boiler-plate code required for Bindable Properties and Attached Properties.

Opt-into this Experimental Feature

We have decided to release this feature using the [Experimental] attribute. This allows us to let the community test its features and provide feedback while giving us the flexibility to modify the API as requested.

  1. In the csproj file of your .NET MAUI app, suppress the MCTEXP001 :
<!-- Opt into Bindable Property Source Generators -->
<PropertyGroup>
    <NoWarn>MCTEXP001</NoWarn>
</PropertyGroup>

In the mean-time, I will be writing more comprehensive documentation and writing Analyzers, similar to CommunityToolkit.MVVM, to help provide you the best coding experience!

Using [BindableProperty]

To leverage the Bindable Property Source Generator, first ensure you using a partial class. Then, add the partial keyword and attach the [CommunityToolkit.Maui.BindableProperty] attribute to your Property:

  1. Add the partial keyword to the class
  2. Add the partial keyword the Property for which to generate an associated Bindable Property
  3. Add the [CommunityToolkit.Maui.BindableProperty] attribute to the Property for which to generate an associated Bindable Property

Here is an example:

using CommunityToolkit.Maui;

namespace BindablePropertySourceGeneratorSample;

public partial class CustomButton : Button
{
    [CommunityToolkit.Maui.BindableProperty]
    public partial int? Number { get; set; }
}

The above example generates the following Bindable Property:

public partial class CustomButton
{
    /// <summary>
    /// BindableProperty for the <see cref = "Number"/> property.
    /// </summary>
    public static readonly global::Microsoft.Maui.Controls.BindableProperty NumberProperty = global::Microsoft.Maui.Controls.BindableProperty.Create("Number", typeof(int?), typeof(BindablePropertySourceGeneratorSample.CustomButton), null, Microsoft.Maui.Controls.BindingMode.OneWay, null, null, null, null, null);
    public partial int? Number { get => (int)GetValue(NumberProperty); set => SetValue(NumberProperty, value); }
}

Setting Default Value

To set the default value for [BindableProperty], simply set the initializer on the partial property:

[CommunityToolkit.Maui.BindableProperty]
public partial int Number { get; set; } = 10;

Setting Default BindingMode

To set the default BindingMode for [BindableProperty], assign the value to the attribute's DefaultBindingMode property:

[CommunityToolkit.Maui.BindableProperty(DefaultBindingMode = BindingMode.TwoWay)]
public partial int Number { get; set; }

Using ValidateValue

To leverage the ValidateValueDelegate, use the nameof() operator to assign the name of the validation method to the the attribute's ValidateValueMethodName property:

[CommunityToolkit.Maui.BindableProperty(ValidateValueMethodName = nameof(ValidateNumber))]
public partial int Number { get; set; }

static bool ValidateNumber(BindableObject bindable, object value)
{
    var updatedValue = (int)value;
    return updatedValue > 0;
}
Important: The method used for ValidateValueMethodName must adhere to the ValidateValueDelegate method signature: static bool MethodName(BindableObject, object)

Using PropertyChanging

To leverage the BindingPropertyChangingDelegate, use the nameof() operator to assign the name of the property changing method to the the attribute's PropertyChangingMethodName property:

[CommunityToolkit.Maui.BindableProperty(PropertyChangingMethodName = nameof(OnNumberChanging))]
public partial int Number { get; set; }

static void OnNumberChanging(BindableObject bindable, object oldValue, object newValue)
{
  Trace.WriteLine($"Old Value: {oldValue}");
  Trace.WriteLine($"New Value: {newValue}");
}
Important: The method used for PropertyChangingMethodName must adhere to the BindingPropertyChangingDelegate method signature: static void MethodName(BindableObject, object, object)

Using PropertyChanged

To leverage the BindingPropertyChangedDelegate, use the nameof() operator to assign the name of the property changed method to the the attribute's PropertyChangedMethodName property:

[CommunityToolkit.Maui.BindableProperty(PropertyChangedMethodName = nameof(OnNumberChanged))]
public partial int Number { get; set; }


static void OnNumberChanged(BindableObject bindable, object oldValue, object newValue)
{
  Trace.WriteLine($"Old Value: {oldValue}");
  Trace.WriteLine($"New Value: {newValue}");
}
Important: The method used for PropertyChangedMethodName must adhere to the BindingPropertyChangedDelegate method signature: static void MethodName(BindableObject, object, object)

Using CoreceValue

To leverage the CoerceValueDelegate, use the nameof() operator to assign the name of the coerce value changed method to the the attribute's CoerceValueMethodName property:

[CommunityToolkit.Maui.BindableProperty(CoerceValueMethodName = nameof(CoerceNumber))]
public partial int Number { get; set; }

static object CoerceNumber(BindableObject bindable, object value)
{
    var updatedValue = (int)value;
    return Math.Clamp(updatedValue, 0, int.MaxValue);
}
Important: The method used for CoerceValueMethodName must adhere to the CoreceValueDelegate method signature: static object MethodName(BindableObject, object)

Creating a Readonly Bindable Property

The [BindableProperty] attribute will automatically generate a Readonly Bindable Property (eg BindableProperty.CreateReadOnly()) when the accessibility modifier of the Property's setter is protected, private protected or private.

For example, a Readonly Bindable Property will be generated for the following properties whose setter cannot be accessed outside of its class:

public partial class CustomButton : Button
{
    [CommunityToolkit.Maui.BindableProperty]
    public partial int Number { get; protected set; }

    [CommunityToolkit.Maui.BindableProperty]
    public partial char Letter { get; private protected set; }

    [CommunityToolkit.Maui.BindableProperty]
    public partial string Text { get; private set; }
}

Using [AttachedBindableProperty<T>]

Using [AttachedBindableProperty<T>] is a bit different. This attribute is applied to either the Class or the Constructor, not a Property, as Attached Properties don't have an associated Property:

.NET Multi-platform App UI (.NET MAUI) attached properties enable an object to assign a value for a property that its own class doesn't define

To leverage the Attached Bindable Property Source Generator, first ensure you using a partial class. Then, add [CommunityToolkit.Maui.AttachedBindableProperty<T>] attribute to either the class or constructor:

  1. Add the partial keyword to the class
  2. Add the [CommunityToolkit.Maui.AttachedBindableProperty<T>] attribute to the class or constructor for which to generate an associated Attached Bindable Property

Here is an example:

namespace BindablePropertySourceGeneratorSample;

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number")]
public partial class CustomButton : Button
{
  public CustomButton()
  {
  }
}

Alternatively, the attribute can be attached to the constructor:

namespace BindablePropertySourceGeneratorSample;

public partial class CustomButton : Button
{
  [CommunityToolkit.Maui.AttachedBindableProperty<int>("Number")]
  public CustomButton()
  {
  }
}

Both examples above generate the following Attached Bindable Property along with its associated Get/Set methods

public partial class CustomButton
{
    /// <summary>
    /// Attached BindableProperty for the Number property.
    /// </summary>
    public static readonly global::Microsoft.Maui.Controls.BindableProperty NumberProperty = global::Microsoft.Maui.Controls.BindableProperty.CreateAttached("Number", typeof(int), typeof(BindablePropertySourceGeneratorSample.CustomButton), null, (global::Microsoft.Maui.Controls.BindingMode)0, null, null, null, null, null);
    /// <summary>
    /// Gets Number for the <paramref name = "bindable"/> child element.
    /// </summary>
    public static int GetNumber(global::Microsoft.Maui.Controls.BindableObject bindable) => (int)bindable.GetValue(NumberProperty);
    /// <summary>
    /// Sets Number for the <paramref name = "bindable"/> child element.
    /// </summary>
    public static void SetNumber(global::Microsoft.Maui.Controls.BindableObject bindable, int value) => bindable.SetValue(NumberProperty, value);
}

Nullability

In C#, Attribute<T> does not yet support nullability for T. For example, [AttachedBindableProperty<string?>] will generate a compiler error.

To generate an Attached Property for a nullable type, set IsNullable to true:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", IsNullable = true)]
public partial class CustomButton : Button
{
}

Setting IsNullable = true will generate an Attached Property using a nullable T?:

public partial class CustomButton
{
    /// <summary>
    /// Attached BindableProperty for the Number property.
    /// </summary>
    public static readonly global::Microsoft.Maui.Controls.BindableProperty NumberProperty = global::Microsoft.Maui.Controls.BindableProperty.CreateAttached("Number", typeof(int), typeof(BindablePropertySourceGeneratorSample.CustomButton), null, (global::Microsoft.Maui.Controls.BindingMode)0, null, null, null, null, null);
    /// <summary>
    /// Gets Number for the <paramref name = "bindable"/> child element.
    /// </summary>
    public static int? GetNumber(global::Microsoft.Maui.Controls.BindableObject bindable) => (int? )bindable.GetValue(NumberProperty);
    /// <summary>
    /// Sets Number for the <paramref name = "bindable"/> child element.
    /// </summary>
    public static void SetNumber(global::Microsoft.Maui.Controls.BindableObject bindable, int? value) => bindable.SetValue(NumberProperty, value);
}

Setting Default Value

To set the default value for [AttachedBindableProperty<T>], assign a compile-time constant to the attribute's DefaultValue property:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", DefaultValue = 10)]
public partial class CustomButton : Button
{
}

Setting Default BindingMode

To set the default BindingMode for [BindableProperty], assign the value to the attribute's DefaultBindingMode property:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", DefaultBindingMode = BindingMode.TwoWay)]
public partial class CustomButton : Button
{
}

Using ValidateValue

To leverage the ValidateValueDelegate, use the nameof() operator to assign the name of the validation method to the the attribute's ValidateValueMethodName property:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", ValidateValueMethodName = nameof(ValidateNumber))]
public partial class CustomButton : Button
{
  static bool ValidateNumber(BindableObject bindable, object value)
  {
      var updatedValue = (int)value;
      return updatedValue > 0;
  }
}
Important: The method used for ValidateValueMethodName must adhere to the ValidateValueDelegate method signature: static bool MethodName(BindableObject, object)

Using PropertyChanging

To leverage the BindingPropertyChangingDelegate, use the nameof() operator to assign the name of the property changing method to the the attribute's PropertyChangingMethodName property:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", PropertyChangingMethodName = nameof(OnNumberChanging))]
public partial class CustomButton : Button
{
  static void OnNumberChanging(BindableObject bindable, object oldValue, object newValue)
  {
    Trace.WriteLine($"Old Value: {oldValue}");
    Trace.WriteLine($"New Value: {newValue}");
  }
}
Important: The method used for PropertyChangingMethodName must adhere to the BindingPropertyChangingDelegate method signature: static void MethodName(BindableObject, object, object)

Using PropertyChanged

To leverage the BindingPropertyChangedDelegate, use the nameof() operator to assign the name of the property changed method to the the attribute's PropertyChangedMethodName property:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", PropertyChangedMethodName = nameof(OnNumberChanged))]
public partial class CustomButton : Button
{
  static void OnNumberChanged(BindableObject bindable, object oldValue, object newValue)
  {
    Trace.WriteLine($"Old Value: {oldValue}");
    Trace.WriteLine($"New Value: {newValue}");
  }
}
Important: The method used for PropertyChangedMethodName must adhere to the BindingPropertyChangedDelegate method signature: static void MethodName(BindableObject, object, object)

Using CoreceValue

To leverage the CoerceValueDelegate, use the nameof() operator to assign the name of the coerce value method to the the attribute's CoerceValueMethodName property:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", CoerceValueMethodName = nameof(CoerceNumber))]
public partial class CustomButton : Button
{
  static object CoerceNumber(BindableObject bindable, object value)
  {
      var updatedValue = (int)value;
      return Math.Clamp(updatedValue, 0, int.MaxValue);
  }
}
Important: The method used for CoerceValueMethodName must adhere to the CoreceValueDelegate method signature: static object MethodName(BindableObject, object)

Using CreateDefaultValue

To leverage the CreateDefaultValueDelegate, use the nameof() operator to assign the name of the create default value method to the the attribute's DefaultValueCreatorMethodName property:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", DefaultValueCreatorMethodName = nameof(CreateDefaultNumber))]
public partial class CustomButton : Button
{
    static object CreateDefaultNumber() => 10;
}
Important: The method used for DefaultValueCreatorMethodName must adhere to the CreateDefaultValueDelegate method signature: static object MethodName()

Modifying Accessibility

By default, [AttachedBindableProperty<T>] will generate a public Bindable Property, a public Getter method and a public Setter method . To modify the accessibility of the Attached Property, set the value of the attribute's BindablePropertyAccessibility, GetterAccessibility and SetterAccessibility properties:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", BindablePropertyAccessibility = AccessModifier.Internal, GetterAccessibility = AccessModifier.Internal, SetterAccessibility = AccessModifier.Internal)]
public partial class CustomButton : Button
{
}

This example will generate the following code:

public partial class CustomButton
{
    /// <summary>
    /// Attached BindableProperty for the Number property.
    /// </summary>
    internal static readonly global::Microsoft.Maui.Controls.BindableProperty NumberProperty = global::Microsoft.Maui.Controls.BindableProperty.CreateAttached("Number", typeof(int), typeof(BindablePropertySourceGeneratorSample.CustomButton), null, (global::Microsoft.Maui.Controls.BindingMode)0, null, null, null, null, null);
    /// <summary>
    /// Gets Number for the <paramref name = "bindable"/> child element.
    /// </summary>
    internal static int GetNumber(global::Microsoft.Maui.Controls.BindableObject bindable) => (int)bindable.GetValue(NumberProperty);
    /// <summary>
    /// Sets Number for the <paramref name = "bindable"/> child element.
    /// </summary>
    internal static void SetNumber(global::Microsoft.Maui.Controls.BindableObject bindable, int value) => bindable.SetValue(NumberProperty, value);
}

Creating a Readonly Attached Property

The [AttachedBindableProperty<T>] attribute will automatically generate a Readonly Attached Bindable Property (eg BindableProperty.CreateAttachedReadOnly()) when the SetterAccessibility value is set to AccessModifier.Protected, AccessModifier.PrivateProtected or AccessModifier.Private.

For example, a Readonly Attached Property will be generated for the following:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", SetterAccessibility = AccessModifier.Protected)]
[CommunityToolkit.Maui.AttachedBindableProperty<char>("Letter", SetterAccessibility = AccessModifier.PrivateProtected)]
[CommunityToolkit.Maui.AttachedBindableProperty<string>("Text", SetterAccessibility = AccessModifier.Private)]
public partial class CustomButton : Button
{
}

Modifying XML Documentation

By default, [AttachedBindableProperty<T>] will generate the boiler-plate XML Documentation seen in examples above. To customize the XML Documentation generated, pass in the XML Documentation as a string to the attribute's BindablePropertyXmlDocumentation property, GetterMethodXmlDocumentation property and SetterMethodXmlDocumentation property accordingly:

[CommunityToolkit.Maui.AttachedBindableProperty<int>("Number", BindablePropertyXmlDocumentation = NumberBindablePropertyXmlDocumentation, GetterMethodXmlDocumentation = NumberGetterXmlDocumentation, SetterMethodXmlDocumentation = NumberSetterXmlDocumentation)]
public partial class CustomButton : Button
{
    const string NumberBindablePropertyXmlDocumentation =
        """
        ///<Summary>The Bindable Property Number for a <see cref="CustomButton"/></Summary>
        """;

    const string NumberGetterXmlDocumentation =
        """
        ///<Summary>Sets the value for a <see cref="CustomButton"/></Summary>
        """;

    const string NumberSetterXmlDocumentation =
        """
        ///<Summary>Gets the value for a <see cref="CustomButton"/></Summary>
        ///<Remarks>Number cannot be less than zero</Remarks>
        """;
}
Important: The string used for the XML Documentation must contain both ///

Conclusion

I hope you enjoy using these new source generators! They were a ton of work to create, but I'm excited to see these bring a giant productivity boost to all developers in the .NET MAUI Community.

Please give us your feedback by opening a Discussion on the .NET MAUI Community Toolkit GitHub repository.

To see more examples of `[BindableProperty] and [AttachedBindableProperty<T>], check out the source code for CommunityToolkit.Maui to see how we're now using it to generate all of the Bindable Properties in our library.

Read the whole story
alvinashcraft
45 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Microsoft explores bringing Linux-like top menu bar to Windows 11 with new PowerToys feature

1 Share
(Image credit: Microsoft)

The team behind PowerToys is exploring a new feature that would enhance the Windows desktop with a new menu bar that spans the top of the display, offering glanceable system information, music controls, and more.

Microsoft describes this idea as an optional UI dock that's part of the Command Pallete feature in PowerToys. When enabled, it can be pinned to the top, left, right or even bottom of the display, and users can pin extensions that are already available as part of PowerToys, without any code changes.

Latest Videos From Windows Central

PowerToys dock customization

The new dock is highly customizable and completely optional. (Image credit: Microsoft)

In its default configuration, the feature is very similar to the menu bar you might find on a Mac or Linux distro. It runs along the top of the display, and users can pin information such as RAM usage, CPU temps, app shortcuts, and more to it.

"The dock is designed to be highly configurable. It can be positioned on the top, left, right, or bottom edge of the screen, and extensions can be pinned to three distinct regions of the dock: start, center, and end. Users can also customize the visual appearance, including background, styling, and theme behavior."

The feature is currently in an early proof of concept stage, and hasn't been committed to ship just yet. Microsoft is gathering feedback on GitHub, and if it proves popular, it'll likely appear as an official feature in the coming weeks or months, so be sure to let Microsoft know if you like it!

In the meantime, developers can compile a dedicated branch where the feature is being tested to try it out now. It's not yet available in the mainline PowerToys release.

All the latest news, reviews, and guides for Windows and Xbox diehards.

What do you think?

Do you like Microsoft's dock menu bar concept for PowerToys on Windows 11?

Thanks for voting!

Please log in or register to see the results!

Join the community

Join the Windows Central Family! The best way to keep in touch and to be informed of our latest quizzes and competitions, as well as news and offers.

Already have an account? Log in

My Details

Update your details below...

Keep in the Know

Would you like to be kept informed about new quizzes and offers from Future and its partners?

Validate Your Mobile No.

We have sent a code to . Please enter it below to verify your account.

Update Your Mobile No.

You may enter a new mobile number below. You will be sent a verification code to the phone number you provide.

embed-poll.hint_heading

embed-poll.hint_subheading

Validate Your Email Address

We have sent a code to . Please enter it below to verify your account.

Update Your Email Address

You may enter a new email address below. You will be sent a verification code to the address you provide.

Create a Username

This will be publicly viewable so make it something you like!

Reset your password

Enter your email address below. If it is registered with us, we will email you a code that will allow you to reset your password.

Check your inbox

If your email address was found in our system, you should receive an email in the next few minutes containing a code. Enter that code below to reset your password.

Set new password

Please enter your new password below.


Follow Windows Central on Google News to keep our latest news, insights, and features at the top of your feeds!


Zac Bowden is a Senior Editor at Windows Central and has been with the site since 2016. Bringing you exclusive coverage into the world of Windows, Surface, and hardware. He's also an avid collector of rare Microsoft prototype devices! Keep in touch on Twitter and Threads

Read the whole story
alvinashcraft
45 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

The Android Phone You Want Is Coming Soon, According To This Samsung Leak

1 Share

Framesira/Shutterstock

A report from Korea said in November that the Galaxy S26 series would be unveiled on February 25 in California, several weeks later than anticipated. Samsung was reportedly dealing with a reshuffle of the Galaxy S26 series, which would lead to inevitable delays. Now, well-known leaker Evan Blass has shared a purported Samsung teaser for the Galaxy S26 Unpacked that features the same date of February 25. The teaser doesn't mention a place or time for the press conference, but it lines up with the previous report.

Samsung has yet to issue invites for the rumored February 25 Unpacked launch event, but the company recently confirmed that the Galaxy S26 series will launch in the first half of 2026, according to Android Authority. Samsung teased during its recent earnings call that the Galaxy S26 will offer new agentic AI experiences. The November report that mentioned the February 25 Unpacked date also noted that AI will be the focus of Samsung's event. AI may be the the reason why Samsung has chosen San Francisco for the first Unpacked event of 2026.

While Samsung's leaked teaser doesn't mention a location for Unpacked event, it does feature icons associated with Galaxy AI on Samsung devices. Separately, Samsung issued a press release earlier this week to tease a new privacy display that's coming soon to Galaxy devices. That announcement also suggested AI may be involved in the privacy display's functionality.

What's coming at Unpacked 2026?

Framesira/Shutterstock

Rumors before Samsung's teaser this week said the Galaxy S26 Ultra will feature a Flex Magic Pixel display that will limit visibility from side angles for anyone looking at the screen except for the user. Put differently, the display will behave as if it were covered with a privacy screen protector. The feature may be exclusive to the Galaxy S26 Ultra, however.

The Galaxy S26 Ultra will also feature a slightly tweaked design, according to leaks. The handset will have slightly rounder corners than its predecessor. Joining the Ultra in the Galaxy S26 lineup are the base Galaxy S26 and the Galaxy S26 Plus. The latter may be the reason why Samsung has delayed the Galaxy S26 launch event. Several reports last year mentioned that Samsung changed the Galaxy S26 lineup during the phone's development. The Korean giant supposedly canceled the ultra-slim Galaxy S26 Edge, replacing it with the Plus variant.

Strong iPhone 17 sales and the popularity of the base iPhone 17 variant may have had an impact on Samsung's change of heart. Samsung is reportedly looking to match the iPhone 17's $799 starting price with the base Galaxy S26 model. In addition to phones, Samsung may launch new wireless earbuds next month, as Blass also mentions the Galaxy Buds 4. Samsung may tease other devices at the event as well. During its Q4 2025 earnings call, Samsung teased that AR glasses are coming this year, without divulging specifics.

Read the whole story
alvinashcraft
45 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Customize Cowork with plugins

1 Share

  • Share

    Copy link

    <a href="https://claude.com/blog/cowork-plugins" rel="nofollow">https://claude.com/blog/cowork-plugins</a>

With Cowork, you set the goal and Claude delivers finished, professional work. Plugins let you go further: tell Claude how you like work done, which tools and data to pull from, how to handle critical workflows, and what slash commands to expose so your team gets even better and more consistent outcomes.

Using Cowork with plugins

Plugins work for any use case, but they're especially powerful for tailoring Claude to specific job functions like sales, legal, and financial analysis.

A sales plugin, for example, could connect Claude to your CRM and knowledge base, teach it your sales process, and give you commands for everything from prospect research to call follow ups. You define what goes in the plugin once, and Claude pulls from that context whenever it's relevant.

As your team builds and shares plugins, Claude becomes a cross-functional expert. The rich context you share gets baked into every relevant interaction, so leaders and admins can spend less time enforcing processes and more time improving them.

Plugin marketplace

To get you started, we're open-sourcing 11 plugins built and used by our own team:

  • Productivity — Manage tasks, calendars, daily workflows, and personal context
  • Enterprise search — Find information across your company's tools and docs
  • Plugin Create/Customize — Create and customize new plugins from scratch
  • Sales — Research prospects, prep deals, and follow your sales process
  • Finance — Analyze financials, build models, and track key metrics
  • Data — Query, visualize, and interpret datasets
  • Legal — Review documents, flag risks, and track compliance
  • Marketing — Draft content, plan campaigns, and manage launches
  • Customer support — Triage issues, draft responses, and surface solutions
  • Product management — Write specs, prioritize roadmaps, and track progress
  • Biology research — Search literature, analyze results, and plan experiments

Easily install these directly from Cowork, browse the full collection on our website, or upload your own plugin (which can be built using Plugin Create). They're also available on GitHub for developers. Every component of plugins (skills, connectors, slash commands, and sub-agents) is file-based, so plugins are easy to build, edit, and share. Try customizing each plugin using Claude to make it just right for you and your team.

Getting started

Plugin support in Cowork is available today as a research preview for all paid Claude users. Start with our open-source collection, customize them, or build something entirely new.

Plugins are currently saved locally to your machine. Better support for org-wide sharing and management (support for private plugin marketplaces, etc.) are coming in the weeks ahead.

Transform how your organization operates with Claude

Get the developer newsletter

Product updates, how-tos, community spotlights, and more. Delivered monthly to your inbox.

Thank you! You’re subscribed.

Sorry, there was a problem with your submission, please try again later.

Read the whole story
alvinashcraft
46 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

You won: Microsoft is walking back Windows 11’s AI overload — scaling down Copilot and rethinking Recall in…

1 Share
(Image credit: Microsoft | Future | Edited with Gemini)

It’s fair to say that Windows 11’s recent endeavour into AI hasn’t gone down well with its most passionate users. It started in 2024 with the unveiling of Windows Recall, which was met with such backlash that Microsoft was forced to postpone it by an entire year while it addressed major security and privacy flaws.

It seems like things have been downhill since. In the last year, Microsoft has taken every opportunity to enshittify Windows 11 by placing Copilot buttons wherever it can across in-box apps like File Explorer and Notepad, even if the implementation is poor or unnecessary.

Latest Videos From Windows Central

Copilot features in Notepad? It's preposterous. (Image credit: Windows Central)

I’m also told that Microsoft has paused work on any additional Copilot buttons for in-box apps, at least for now. While I don’t expect this pause to be permanent, it does sound like Microsoft plans to be more tactful and deliberate in where these Copilot buttons and integrations will appear going forward.

Windows Recall is another AI experience that I’m told is under review. Sources tell me that Microsoft believes that Recall, in its current implementation, has failed, though I understand the company is exploring ways to evolve the concept rather than scrap it entirely, possibly dropping the Recall name in the process, though this is unconfirmed.

Other AI initiatives, such as Semantic Search, Agentic Workspace, Windows ML, and Windows AI APIs, are continuing ahead as planned. Microsoft believes that these under-the-hood AI efforts are still important for app developers and users, positioning Windows as a viable contender amongst other OS’s that are also building AI frameworks into their platforms.

The company is shifting away from ‘AI everywhere’ and toward features that actually make sense for Windows users.

The good news is that it's clear Microsoft has heard the feedback around its heavy-handedness when it comes to Copilot buttons in Windows apps. The company is stepping back to readjust how best to implement these AI integrations across the OS, hopefully resulting in a more meaningful and useful AI experience on the platform, rather than haphazardly adding the Copilot icon to every UI surface it can.

This effort is likely part of Microsoft's overall effort to "fix" Windows 11 this year. I understand that the company is moving quickly to begin shipping meaningful changes that are designed to signal to customers that it is listening to feedback, and streamlining where Copilot shows up across in-box apps would be a strong place to start.

Microsoft pulling back its Windows 11 AI push is a big shift — fewer forced Copilot moments, a reworked Recall, and a more realistic approach overall.

How does that land with you? Is this the right move, or should Microsoft double down instead? Share your take below and let’s see where the community stands.

What do you think?

Do you think Microsoft's move to reduce and streamline Copilot integrations on Windows 11 is a good thing?

Thanks for voting!

Please log in or register to see the results!

Join the community

Join the Windows Central Family! The best way to keep in touch and to be informed of our latest quizzes and competitions, as well as news and offers.

Already have an account? Log in

My Details

Update your details below...

Keep in the Know

Would you like to be kept informed about new quizzes and offers from Future and its partners?

Validate Your Mobile No.

We have sent a code to . Please enter it below to verify your account.

Update Your Mobile No.

You may enter a new mobile number below. You will be sent a verification code to the phone number you provide.

embed-poll.hint_heading

embed-poll.hint_subheading

Validate Your Email Address

We have sent a code to . Please enter it below to verify your account.

Update Your Email Address

You may enter a new email address below. You will be sent a verification code to the address you provide.

Create a Username

This will be publicly viewable so make it something you like!

Reset your password

Enter your email address below. If it is registered with us, we will email you a code that will allow you to reset your password.

Check your inbox

If your email address was found in our system, you should receive an email in the next few minutes containing a code. Enter that code below to reset your password.

Set new password

Please enter your new password below.


Follow Windows Central on Google News to keep our latest news, insights, and features at the top of your feeds!


Zac Bowden is a Senior Editor at Windows Central and has been with the site since 2016. Bringing you exclusive coverage into the world of Windows, Surface, and hardware. He's also an avid collector of rare Microsoft prototype devices! Keep in touch on Twitter and Threads

Read the whole story
alvinashcraft
46 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories