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

A Better v-model with defineModel

1 Share

Rather than three separate pieces for a two-way bound value, defineModel gives this common Vue component pattern a single line of syntax.

In my previous article on Vue Basics: Script Setup Sugar, we went through the five compiler macros that make <script setup> so pleasant to work with. defineModel got a section there, but it was sharing the page with four other macros. I also said outright that the v-model syntax itself was out of scope for that piece. This post is that missing piece.

If you’ve been writing Vue components for a while, you know the ritual. You want a custom input component that works with v-model, so you declare a modelValue prop, declare an update:modelValue emit, and then write a little computed property or a handler to glue the two together. That’s three moving parts for one simple idea. A value flows into your component, and it flows back out.

defineModel collapses all of that into a single line. It landed as a stable feature in Vue 3.4, and today I want to walk through how it works, what it compiles down to, how to handle multiple bindings and modifiers, and the one gotcha that will bite you if nobody warns you about it.

What Is defineModel?

defineModel is a compiler macro, the same family as defineProps and defineEmits. You call it inside <script setup>, and it hands you back a ref.

That ref is special. Reading it gives you the value the parent passed down. Writing to it tells the parent to update. You never touch emit directly.

const model = defineModel()

Behind the scenes, the compiler turns that one line into a prop named modelValue and an emit named update:modelValue. When you do model.value = 'draft', the emit fires with that string as the payload. The parent’s v-model picks it up and updates its own state, which flows back down as the prop.

So there’s nothing new happening underneath. It’s the same prop and event pair Vue has always used for component v-model. The difference is that Vue writes it for you.

The Way We Used to Do It

Let’s look at a text input wrapper written the pre-3.4 way, because the difference is easier to see side by side.

BaseInput.vue

<script setup>
const props = defineProps({
  modelValue: {
    type: String,
  },
})

const emit = defineEmits(['update:modelValue'])

const handleInput = (event) => {
  emit('update:modelValue', event.target.value)
}
</script>

<template>
  <input :value="props.modelValue" @input="handleInput" />
</template>

That works, and plenty of production apps are still full of components shaped exactly like this. There’s nothing wrong with it!

But notice how much of it is simply fluff. The prop name and the emit name have to match a convention you’re expected to remember.

And a big one, you can’t use v-model on the inner <input> because you’re not allowed to mutate a prop, so you fall back to :value plus @input.

You’ve probably seen the alternative version of this too, the writable computed that people reach for so they can write to the value again:

import { computed } from 'vue'

const props = defineProps({ modelValue: { type: String } })
const emit = defineEmits(['update:modelValue'])

const localValue = computed({
  get: () => props.modelValue,
  set: (value) => emit('update:modelValue', value),
})

Clever, but it’s still four extra lines and one more thing to decode every time you read the component.

The Same Component with defineModel

Here’s the whole thing again.

BaseInput.vue

<script setup>
const model = defineModel({ type: String })
</script>

<template>
  <input v-model="model" />
</template>

Let’s break it down. defineModel declares the modelValue prop and the update:modelValue emit in one shot. The options object takes the prop options you already know from defineProps. type and required behave exactly the same way, and default has one wrinkle we’ll get to shortly. It also takes two extra options, get and set, which we’ll cover in the modifiers section.

The return value is a writable ref, which means we can hand it straight to v-model on the native input. No :value, no @input, no computed with a setter. When the user types, v-model writes to model, writing to model emits the update, and the parent sees the new value.

A parent that uses this doesn’t change at all; it is unaware of the inner workings of the component:

SignupForm.vue

<script setup>
import { ref } from 'vue'
import BaseInput from './BaseInput.vue'

const email = ref('')
</script>

<template>
  <BaseInput v-model="email" />
  <p>You typed: {{ email }}</p>
</template>

That’s the part I like most about this macro. It only changes how you write the child. Nothing about the parent changes, so every component that already uses yours keeps working, and you can migrate file by file whenever you happen to be in there.

Required, Default and the Gotcha

You can mark a model as required, which is genuinely useful for components that make no sense without a value:

const status = defineModel({ required: true })

You can also give it a default:

const status = defineModel({ default: 'draft' })

⚠️ Keep this in mind!

Defaults on a model aren’t the same as defaults on a normal prop. If the parent binds a ref that happens to be undefined, the child will use its default of 'draft', but the parent’s ref stays undefined. The two sides are now showing different values and nothing has told you about it. The child thinks the status is a draft; the parent thinks there’s no status at all.

The official docs flag this too, and my personal rule is simple. If a component is going to declare a default for its model, I initialize the parent ref with a real value instead of leaving it empty. Let the parent own the starting state, and use the child default only as a safety net.

For objects and arrays, wrap the default in a function the same way you would for any other prop:

const tags = defineModel({ default: () => [] })

Multiple v-model Bindings

v-model takes an argument, which means one component can expose more than one two-way binding. Pass the prop name as the first argument to defineModel and you get a separate ref for each one. This has to be a plain string since the macro runs at build time, so a variable would have no value to read yet.

DateRangePicker.vue

<script setup>
const startDate = defineModel('startDate', { type: String })
const endDate = defineModel('endDate', { type: String })
</script>

<template>
  <input type="date" v-model="startDate" />
  <input type="date" v-model="endDate" />
</template>

And the parent binds each one by name:

ReportFilters.vue

<script setup>
import { ref } from 'vue'
import DateRangePicker from './DateRangePicker.vue'

const from = ref('2026-01-01')
const to = ref('2026-01-31')
</script>

<template>
  <DateRangePicker v-model:start-date="from" v-model:end-date="to" />
</template>

Notice the casing. In the template we write v-model:start-date in kebab-case, and in the child we declare defineModel('startDate') in camelCase. Vue handles the conversion for props the same way it always has, so both spellings refer to the same thing.

Date ranges are the case I hit most often, along with min/max sliders and address blocks. Anything where the component genuinely owns several related values, and where one object prop would be worse. The parent would have to spread the whole object just to change one field.

To be quite honest with you, I try not to go past two or three models on a single component. If you find yourself with more than two, usually it signals that the component is doing too much and wants to be split, or the data really is one object and should travel as one.

Modifiers Without the Pain

Custom v-model modifiers are one of those Vue features almost nobody used before 3.4, and I’m fairly sure the reason was that wiring them up was tedious. You had to declare a second prop with a very specific name, default it to an empty object and check it by hand.

With defineModel, you destructure the return value into a pair. The first element is the ref. The second is the modifiers object.

SlugInput.vue

<script setup>
const [model, modifiers] = defineModel({
  set(value) {
    if (modifiers.slug && value) {
      // Transform a string like "Hello world" into "hello-world"
      return value.toLowerCase().replace(/\s+/g, '-')
    }
    return value
  },
})
</script>

<template>
  <input v-model="model" />
</template>

The parent opts in with a dot:

ArticleForm.vue

<script setup>
import { ref } from 'vue'
import SlugInput from './SlugInput.vue'

const slug = ref('')
</script>

<template>
  <SlugInput v-model.slug="slug" />
</template>

Let’s break down what’s happening. The set option is a transformer that runs on the way out, right before the value is emitted to the parent.

Inside it we check modifiers.slug, which is true only when the parent wrote .slug on the binding. If it’s there, we lowercase the text and swap spaces for hyphens. Otherwise, we pass the value through untouched.

Notice the && value guard. The set option runs on every write, including writes you make yourself from inside the component. If a reset somewhere does model.value = null, the transformer would try to call toLowerCase on it and throw. It’s a tiny guard and it stops that crash.

Keep in mind that set never runs when you read the model, so it does nothing on first render. If you want the same protection when reading, that’s what get is for.

There’s a matching get option that transforms on the way in, when you read the model ref inside the child. It’s good for cleaning up a value so your template doesn’t have to keep checking it:

SearchInput.vue

<script setup>
const query = defineModel({
  type: String,
  get: (value) => value ?? '',
})
</script>

<template>
  <input v-model="query" />
  <p>{{ query.length }} characters</p>
</template>

The parent is free to hold null or leave the ref empty, and everything inside the child can treat the value as a string. This is a mild version of the mismatch I warned about earlier, since the child shows an empty string while the parent still holds null. It’s much tamer than inventing a default value, and the first keystroke puts both sides back in step.

One important caveat here.

A get should never change a value the user actually typed. It runs on every read, so anything that reshapes real input will fight the user as they type.

The example above is safe because ?? '' only steps in when there’s nothing there. Any string the user types passes through untouched.

Now, say you write a get that rounds a number to two decimals instead. It looks fine in a demo, but get runs every single time the value is read, so it reformats the number right back into the field. Type 12.567 and the field rewrites itself under you while you’re still typing.

Filling in a missing value is fine. Reformatting a real one is not.

For named models, the modifiers come back from that specific model’s own destructure:

const [startDate, startModifiers] = defineModel('startDate')
const [endDate, endModifiers] = defineModel('endDate')

Write v-model:start-date.iso on the parent and only startModifiers sees { iso: true }. The other model’s modifiers object stays empty.

TypeScript

If you’re working in TypeScript, defineModel takes a type parameter.

const amount = defineModel<number>()

That gives you Ref<number | undefined>, because nothing guarantees the parent passed anything. Mark it required and the undefined goes away:

const amount = defineModel<number>({ required: true })

Modifier names can be typed too, with a second type parameter as a union of the modifier strings you support:

const [amount, modifiers] = defineModel<number, 'rounded'>()

Now modifiers.rounded type checks and a typo like modifiers.rounde does not. This is a small thing, but it’s the kind of small thing that saves you a confused 10 minutes.

When Not to Reach for a defineModel

defineModel makes two-way binding so cheap to write that it’s tempting to put one on everything.

A model is the right shape when the parent owns a value and the child is a nicer way to edit it. Inputs, selects, toggles, pickers, editors. The child has no opinion about the value beyond how it’s displayed and changed.

It’s the wrong shape when the child is really reporting something rather than editing something. If a component is telling the parent “the user scrolled past this point” or “validation failed,” that’s an event, not a model. Use defineEmits and say what happened. Two-way binding there just gives the parent a piece of state it has no business writing to.

Migrating an Existing Component

If you have a codebase full of the old shape, the swap is mechanical. Delete the modelValue entry from defineProps, delete update:modelValue from defineEmits, delete the handler or the computed, and add one defineModel call. Then replace :value plus @input in the template with a plain v-model.

Two things to watch for while you do it:

  • Other props: If your component had props alongside modelValue, keep the defineProps call for those and just remove the model entry. defineModel and defineProps live happily in the same file, they just can’t declare the same prop name twice.
  • Other emit sites: If you were emitting update:modelValue from somewhere other than the input handler, say inside a reset method, that becomes a plain assignment like model.value = ''.

One last thing before you start. defineModel is 3.4 and up, and the modifier destructuring shape is part of that same release. If you’re stuck on an older 3.x for whatever reason, the props-and-emit version is still completely valid Vue and there’s no urgency to rewrite anything. This is a quality-of-life feature, not a correctness fix.

Wrapping Up

defineModel takes the most common component pattern in Vue, the two-way bound value, and gives it a single line of syntax instead of three separate pieces. You get a writable ref you can pass straight to v-model, prop options you already know, named models for components with several bindings and modifier support that’s finally worth using.

The defineModel API reference and the Component v-model guide both have more detail, especially around the transformer options.

Happy v-modeling!

Read the whole story
alvinashcraft
20 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

C++ Dynamic Debugging is now generally available

1 Share

Introduction

We are excited to announce that C++ Dynamic Debugging is now generally available in all Visual Studio 2026 channels and the Microsoft C++ (MSVC) Build Tools version 14.52.

In the traditional workflow for games or large applications, switching to a debug build gives you access to debug symbols at the expense of performance. In contrast, when you debug optimized or release builds, you’ll often encounter variables that are “optimized away” and find it difficult to step reliably through the code you want to inspect.

With C++ Dynamic Debugging, you get the best of both worlds. You can inspect local variables, step through your source line by line, and step into inlined functions. The rest of your application stays optimized, so you can keep the runtime performance you need to reach and investigate a problem.

After turning on the feature and rebuilding your application, Dynamic Debugging will deoptimize functions for you when setting a breakpoint or stepping into a function. You don’t need to stop, add #pragma optimize, rebuild, and reproduce the issue again just to inspect that code. For large games and performance-sensitive applications, that means less time preparing to debug and more time investigating the issue.

Image before
Before (Optimized)

Image after
After (With C++ Dynamic Debugging)

Customer Feedback

From game development to virtual reality, Microsoft teams have already been using C++ Dynamic Debugging to make optimized code easier to debug. Here’s what they’re saying:

“Dynamic Debugging is a game changer for C++ development. It lets me work in the optimized builds I actually need for large game codebases, while still being able to deoptimize and inspect code and runtime state when it matters. It removes a longstanding tradeoff between realistic runtime performance and a productive debugging experience.”

Michael Buschbeck – Principal Software Engineer, Microsoft Havok

“Performance is critical when developing virtual reality applications, so my team builds with optimizations on. Dynamic Debugging lets us debug that optimized code as if it were unoptimized. It’s so seamless you forget how much it’s helping.”

Bryce Hutchings – Principal Software Engineer, Microsoft Cloud Streaming, Mixed Reality, and Graphics

Try it in your project

For an x64 MSBuild C++ project, select your Release configuration then open project properties. Set Configuration Properties > Advanced > Use C++ Dynamic Debugging > Yes. Then, rebuild your project to get started. This setting turns off Whole Program Optimization. For CMake and other build systems, you can pass the new /dynamicdeopt switch to cl.exe, lib.exe, and link.exe.

C++ Dynamic Debugging also works with Unreal Engine 5.6 and later, with support in Unreal Build Tool and Unreal Build Accelerator. To try it, enable WindowsPlatform.bDynamicDebugging = true; in your target’s .Target.cs file and rebuild.

In addition, Dynamic Debugging is compatible with distributed build systems like FastBuild and IncrediBuild.

See the documentation for other build systems, requirements, and limitations.

Share your feedback

We would love to hear how C++ Dynamic Debugging works for your projects. Share your thoughts by commenting below, through Help > Send Feedback in Visual Studio, on X (@VisualC), or by email at visualcpp@microsoft.com.

The post C++ Dynamic Debugging is now generally available appeared first on C++ Team Blog.

Read the whole story
alvinashcraft
28 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Introducing BoldDocServer: An Office Online Server Alternative for SharePoint Server

1 Share

Introducing BoldDocServer: An Office Online Server Alternative for SharePoint Server

TL;DR: Syncfusion introduces BoldDocServer, a new solution for browser-based Word, Excel, and PDF experiences in SharePoint Server. With Office Online Server support ending on December 31, 2026, BoldDocServer gives organizations a new option to continue supported document viewing, editing, review, and collaboration while keeping SharePoint as the document repository.

Why BoldDocServer, and why now?

December 31, 2026, is becoming an important date for organizations running Office Online Server with SharePoint Server.

Microsoft support for Office Online Server ends on that date. For teams that depend on browser-based document viewing and editing, the approaching deadline raises a practical question:

What happens to those SharePoint document processes next?

Some organizations may choose to change their broader Microsoft architecture. Others may want to continue operating SharePoint Server and replace the browser-based document layer that Office Online Server provided.

That second scenario is where BoldDocServer fits.

Syncfusion® is introducing BoldDocServer to bring browser-based Word, Excel, and PDF experiences to SharePoint Server through WOPI. Users can work with supported documents from the browser, while SharePoint remains responsible for document storage, permissions, and repository operations.

Let’s look at what BoldDocServer provides, how it works with SharePoint, and what organizations evaluating their post-Office Online Server strategy should know.

Office Online Server support ends December 31, 2026

Office Online Server has long provided browser-based viewing and editing experiences for Microsoft Office documents in supported server environments.

According to Microsoft’s product lifecycle, Office Online Server reaches the end of support on December 31, 2026.

That does not mean every existing deployment suddenly stops functioning on January 1, 2027. It does mean organizations relying on Office Online Server need a plan for operating beyond its supported lifecycle.

For organizations using SharePoint Server, now is the time to consider questions such as:

  • Do we intend to continue running SharePoint Server?
  • Which browser-based document experiences do our users depend on?
  • Do we need Word and Excel editing directly from SharePoint?
  • Do users also need PDF viewing and review scenarios?
  • Which document permissions and repository processes must remain in SharePoint?
  • What replacement or migration path should we validate before the deadline?

Planning early gives teams time to test document behavior, permissions, save-back processes, collaboration, and deployment requirements before Office Online Server reaches retirement.

What are the options for SharePoint Server teams?

There is no single path that fits every organization. Teams evaluating Office Online Server retirement may broadly consider the following approaches:

ApproachWhat it means
Keep SharePoint Server and replace the browser document layerContinue using SharePoint as the document repository while introducing another solution for supported browser-based viewing and editing.
Move document workloads to Microsoft’s cloud servicesReevaluate the broader SharePoint and Microsoft 365 architecture and move applicable workloads to supported cloud services.
Continue with the existing environment after support endsKeep operating Office Online Server outside its supported lifecycle, with the corresponding operational and support considerations.

BoldDocServer is designed for the first path: Organizations that plan to continue using SharePoint Server while replacing the browser-based document experience provided by Office Online Server.

Introducing BoldDocServer

BoldDocServer is a Syncfusion product for browser-based document viewing, editing, review, and collaboration with SharePoint Server. It connects SharePoint with Syncfusion’s document experiences through the Web Application Open Platform Interface (WOPI).

The responsibilities remain clearly separated:

ComponentRole
SharePoint ServerStores documents, manages permissions, and handles repository operations.
BoldDocServerConnects SharePoint to the browser-based document experience through WOPI.
Syncfusion document experiencesProvide supported Word editing, Excel editing, and PDF viewing and review capabilities.
Collaboration servicesSupport applicable collaborative scenarios when enabled and configured.

The important point is that BoldDocServer does not replace SharePoint as the document repository. SharePoint continues to store documents and manage access. BoldDocServer provides the browser-based experience for supported document types.

Work with Word, Excel, and PDF documents from SharePoint

BoldDocServer brings common enterprise document scenarios into the browser.

Edit Word documents

Users can open supported Word files stored in SharePoint through the integrated Syncfusion document editing experience. They can view and modify supported document content and save supported changes back to SharePoint through the configured WOPI workflow.

Spell-check functionality can also be used when the required dictionary resources are configured.

Work with Excel workbooks

For Excel files, the integrated Syncfusion Spreadsheet Editor provides the browser-based workbook experience.

Users can open workbooks stored in SharePoint, work with supported spreadsheet content, and save supported changes through the configured integration.

Review PDF documents

PDF document experiences use the integrated Syncfusion PDF Viewer.

Users can open PDFs stored in SharePoint and use supported viewing, annotation, and review capabilities without leaving the browser-based workflow.

Supported document experiences at a glance

FormatExperience
DOCX, DOC, DOTX, DOCM, DOTM, DOTViewing and editing
XLSX, XLS, CSV, XLSM, XLSBViewing and editing
PDFViewing and supported annotation and review

Available operations depend on the corresponding document experience and deployment configuration.

Collaborate on document processes

SharePoint document scenarios often involve multiple users. A Word document may move between authors and reviewers. A workbook may need updates from several team members. A PDF may require annotations before approval.

BoldDocServer supports collaboration for applicable Word, Excel, and PDF experiences when the required collaboration services are enabled and configured. The exact collaboration experience depends on the document type and the capabilities enabled for the deployment.

Keep SharePoint in control of documents and permissions

For organizations already invested in SharePoint Server, an important question is whether replacing the document-editing layer also means changing the way documents are stored or secured.

With BoldDocServer, SharePoint remains the document repository and source of document permissions.

When a document is opened, SharePoint and BoldDocServer communicate through the configured WOPI workflow. The user’s effective access determines whether the document can be edited or should be opened with restricted access.

For example, when a user does not have permission to modify a document, editing operations can be restricted accordingly. This lets organizations introduce a new browser-based document experience without moving responsibility for document permissions away from SharePoint.

How BoldDocServer works with SharePoint

The process can be summarized in five steps.

1. Select a document

A user chooses a supported document from SharePoint.

2. Open the document experience

SharePoint initiates the configured WOPI action and opens the corresponding BoldDocServer experience in the browser.

3. Access the document

BoldDocServer communicates with SharePoint through the configured WOPI workflow to access the file.

4. View, edit, or review

The user works with the document through the corresponding Syncfusion document experience. Collaborative editing is available where supported and configured.

5. Save supported changes

Supported changes are saved back to SharePoint through the configured save-back process.

A simplified architecture looks like this: SharePoint Server connects through WOPI to BoldDocServer, which serves the DOCX Editor, Spreadsheet Editor and PDF Viewer as a browser-based document experience.

How SharePoint and the browser editor work together

Throughout the process, SharePoint remains responsible for document storage and permissions.

Why BoldDocServer matters for SharePoint teams

Office Online Server retirement creates an opportunity to review browser-based document experiences that may have been operating unchanged for years.

For teams planning to continue with SharePoint Server, that review should answer questions such as:

  • Which Office Online Server workloads are business-critical?
  • Which document types are frequently edited in the browser?
  • Which collaboration and review features are required?
  • Which SharePoint permission behaviors must remain unchanged?
  • How much infrastructure change is acceptable?
  • How early should a replacement environment be tested?

BoldDocServer gives organizations another option when the requirement is to retain SharePoint Server while continuing supported browser-based document experiences.

Who should evaluate BoldDocServer?

BoldDocServer is especially relevant to organizations that:

  • Currently use Office Online Server with SharePoint Server.
  • Plan to continue using SharePoint Server beyond December 31, 2026.
  • Need browser-based Word and Excel editing.
  • Need PDF viewing, annotation, or review as part of SharePoint document scenarios.
  • Want SharePoint to remain responsible for document storage and permissions.
  • Need a WOPI-based browser document experience.
  • Want to test a replacement before Office Online Server reaches retirement.

Organizations with business-critical Office Online Server workloads should consider beginning their evaluation well before the deadline.

Is BoldDocServer a complete replacement for every Office Online Server workload?

Not necessarily. BoldDocServer is specifically designed around SharePoint Server document scenarios involving supported Word, Excel, and PDF experiences.

If your organization uses Office Online Server with other Microsoft server products or for workloads outside SharePoint, evaluate those dependencies separately as part of your transition plan.

This distinction helps ensure that migration planning reflects the actual workloads used within your environment.

Start planning before the deadline

December 31, 2026, may still leave some planning time, but enterprise infrastructure changes involve more than installing a replacement product.

A practical evaluation can follow these steps:

  1. Inventory your current Office Online Server workloads: Identify the SharePoint sites, document types, departments, and business processes that depend on browser-based document access.
  2. Confirm your required document capabilities: Separate essential editing, review, and collaboration scenarios from features that are rarely used.
  3. Deploy BoldDocServer in a test environment: Begin with a test SharePoint farm or test site rather than changing production immediately.
  4. Configure and validate the WOPI integration: Verify document opening, permissions, editing, reviewing, and save-back behavior.
  5. Test representative Word, Excel, and PDF files: Use realistic documents from your organization’s existing scenarios.
  6. Validate permissions and multiuser scenarios: Test users with different SharePoint permission levels and collaboration requirements.
  7. Plan production rollout before Office Online Server retirement: Leave enough time for technical validation, security review, user testing, and operational preparation.

The goal should not simply be to replace one server with another. It should be to verify that the document processes your organization depends on continue to operate as expected.

Frequently Asked Questions

What is BoldDocServer?

BoldDocServer is a Syncfusion product that connects SharePoint Server with supported browser-based Word, Excel, and PDF experiences through WOPI. SharePoint continues to manage document storage and permissions.

Why is Syncfusion introducing BoldDocServer now?

Microsoft Office Online Server reaches the end of support on December 31, 2026. BoldDocServer gives organizations that plan to continue using SharePoint Server another option for supported browser-based document experiences.

Is BoldDocServer an Office Online Server alternative?

For supported SharePoint Server document viewing, editing, review, and collaboration scenarios, BoldDocServer is designed as an alternative browser-document layer.

Organizations using Office Online Server for workloads outside SharePoint should evaluate those scenarios separately.

Which document formats does BoldDocServer support?

BoldDocServer supports DOCX, DOC, DOTX, DOCM, DOTM, DOT files for Word documents, XLSX, XLS, CSV, XLSM, XLSB files for Excel workbooks, and PDF viewing with supported annotation and review operations.

Does BoldDocServer replace SharePoint Server?

No. SharePoint continues to store documents, manage permissions, and handle repository operations. BoldDocServer provides the browser-based document experience through WOPI.

Can users save documents back to SharePoint?

Yes, supported changes can be saved back to SharePoint through the configured WOPI workflow. Available save operations depend on the document type, supported capabilities, and deployment configuration.

Does BoldDocServer support collaboration?

BoldDocServer supports collaboration for applicable document scenarios when the required collaboration services and features are enabled and configured. The exact behavior depends on the document type and deployment configuration.

When does Office Online Server support end?

Microsoft lists December 31, 2026 as the retirement date for Office Online Server.

When should organizations begin evaluating a replacement?

Organizations that rely on Office Online Server should begin evaluating their options before the retirement date so they have enough time to inventory document scenarios, test documents, validate SharePoint permissions and WOPI integration, and prepare for production rollout.

Explore BoldDocServer

Office Online Server support ends on December 31, 2026, but organizations do not need to wait until the deadline to decide what comes next.

BoldDocServer gives SharePoint Server teams a new option for browser-based Word, Excel, and PDF experiences while keeping SharePoint at the center of document storage and permissions.

If your organization expects to continue using SharePoint Server after Office Online Server retires, now is a good time to evaluate your document requirements and test your transition plan.

Explore BoldDocServer, start a free trial, and follow the Quick Start and SharePoint Integration guides to evaluate it with your SharePoint environment.

Read the whole story
alvinashcraft
34 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Build better applications with Bold BI, a Visual Studio subscriber benefit from Syncfusion

1 Share

Blog Bold BI banner imageI was talking with a developer recently about a project his team was working on. They’d built an application, connected their data sources, and had everything in working order. Then came another request from management: Could they add a dashboard within the app so users could actually see what was happening with all that data? 

As we talked, the developer explained what that really meant. More infrastructure, more queries, more charts, additional reporting functionality, and another set of features to build, test and maintain. And all of this would take valuable time to produce. 

Sound familiar? 

It’s a common challenge. The data is already there, but turning it into something useful in your app can become a project of its own. 

If that resonates, now is a good time to explore your Visual Studio subscriber benefits.  

Eligible Visual Studio Professional and Enterprise subscribers have access to the Bold BI Cloud Edition benefit from Syncfusion. It’s designed to help developers create interactive dashboards, connect data sources, and bring analytics into their applications without building everything bit by bit. Once activated, this subscriber benefit is provided at no additional cost for a 6-month period, providing an opportunity to explore and experiment as you test and build the reporting solutions that work best for you. 

Turn Your Data into Something Useful 

Valuable applications should generate valuable data. The challenge is not only making that information accessible and meaningful to the people who need it, but also making it visible in the places that can add the most value. 

Perhaps a product manager wants to understand how customers use a particular feature. Or maybe a sales team needs a practical revenue operations dashboard to monitor pipeline and conversions. You could build the required reporting experience yourself, including the systems architecture, data connections, visualizations, and dashboard interfaces. But before committing significant time and resources to building a solution from scratch, it’s worth exploring how Bold BI Cloud Edition can help create those dashboards and embed them directly into your application. With 6 months of Bold BI through your subscriber benefit, you have time to experiment with the available reporting solutions. 

 

And with AI-powered insights, you have another way to explore the data behind those dashboards and uncover information that might otherwise take additional analysis. It’s a practical way to extend what your applications can do while keeping your attention on the development work that matters most. 

Bring Powerful Analytics into Your Development Workflow 

With Bold BI Cloud Edition, developers can: 

  • Connect to 140+ data sources: Bring information together from databases, cloud platforms, and business applications without building every integration from scratch. 
  • Build interactive dashboards: Create charts, graphs, tables, and other visualizations using an interactive dashboard editor. 
  • Embed analytics into applications: Add dashboards directly into applications, giving users access to insights within their existing workflows. 
  • Explore AI-powered insights: Use AI-assisted capabilities to better understand connected data and identify useful trends. 
  • Share insights with others: Collaborate with team members and stakeholders through dashboards, scheduled exports, and email sharing. 

Bold BI also includes onboarding services to help subscribers get started with this benefit. 

Put Your Subscriber Benefit to Work 

One of the things I appreciate about Visual Studio Subscriptions is that the value extends well beyond the IDE. Your Subscription can include developer tools, cloud services, training resources, and partner benefits designed to help you build, learn, and work more efficiently. 

Bold BI is one of those benefits you may not have explored yet.  

If you’re considering a way to bring analytics into your applications without building everything yourself, your 6 months of Bold BI Cloud Edition is worth exploring. Go to https://my.visualstudio.com/ to learn more. And when you’re ready to test a reporting experience in your next app, that’s the perfect time to consider activating your Bold BI benefit through the Visual Studio Subscriptions portal. 

The post Build better applications with Bold BI, a Visual Studio subscriber benefit from Syncfusion appeared first on Visual Studio Blog.

Read the whole story
alvinashcraft
39 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Build Dynamic Forms with the Syncfusion Form Builder and Form Renderer [Webinar Show Notes]

1 Share

Build Dynamic Forms with the Syncfusion Form Builder and Form Renderer [Webinar Show Notes]

Building and maintaining forms directly in application code can become time-consuming as fields, validation rules, layouts, and business requirements change. A schema-driven approach makes these forms easier to design, reuse, and update.

In this webinar, Syncfusion® Software Engineer Prabhavathi Kannan demonstrates how to visually create and configure forms with Syncfusion React Form Builder, represent the form definition and behavior in a reusable JSON schema, and generate a responsive runtime form with Syncfusion React Form Renderer.

Explore the endless possibilities with Syncfusion's outstanding React UI components.

What you’ll learn

  • Understand form-maintenance challenges and how a schema-driven approach helps.

  • Create and configure forms visually.

  • Configure validation, conditional rules, dependencies, and expressions.

  • Inspect, export, import, update, and reuse JSON schemas.

  • Render responsive runtime forms from a schema.

  • Update runtime forms without rebuilding individual fields.

Watch the webinar

See how to visually build forms, define reusable JSON schemas, configure validation and conditional logic, and render responsive runtime forms in React using Syncfusion Form Builder and Form Renderer in this webinar:

If you missed the webinar, the recording is available on our YouTube channel.

Demo overview

The demonstration uses React for both Form Builder and Form Renderer.

The demo showcases a complete schema-driven workflow through an Employee Onboarding form. Form Builder is used to create and configure the form, while Form Renderer uses the schema to generate the runtime form with its layout, validation, dependent dropdowns, calculated values, and conditional visibility.

The session also demonstrates schema reuse by updating the form in Form Builder and loading the revised schema into Form Renderer, without manually rebuilding the corresponding runtime fields.

Timestamps

[00:00] Introduction & Webinar Overview

[01:02] Why Schema-Driven Forms Matter

[03:30] Syncfusion Form Builder Overview

[07:30] Creating Forms & Configuring Components

[11:30] Building JSON Schemas and Form Logic

[15:27] Live Demo: Rendering an Employee Onboarding Form

[16:18] Validation, Conditional Rules & Dynamic Fields

[17:31] Responsive Design and Custom Components

[18:14] Updating Forms Through Schema Changes

[20:08] Key Takeaways & Recap

[21:15] Q&A and Closing Remarks

Frequently Asked Questions

Is there Blazor support also?

We plan to introduce the Form Builder and Form Renderer components for the Blazor platform. These components will be available in a future release.

What about .NET MAUI?

Support for Form Builder and Form Renderer components on the .NET MAUI platform is planned and will be included in a future release.

Can you explain for the dropdownlist control, how the control uses control data (from database tables etc.)?

In the Form Builder and Form Renderer components, the Dropdown List control is powered by the Syncfusion React Dropdown List component. Therefore, its user interface and data-binding behavior remain consistent with the standalone component. To bind remote data to the Dropdown List, refer to the documentation link provided in the last question section.

is it possible to define own (custom) properties that I would like to set?

Yes, you can add new properties to the Form Builder’s field Property Panel on the right side. As long as the property is supported by the corresponding form field, it will function correctly.

To add a custom property, refer to the following documentation:
Property Panel in React Form Builder component | Syncfusion

The custom property is automatically included in the generated form schema. In the Form Renderer, this property is also processed automatically and can be used to customize the field’s behavior or rendering.

If the schema changes and you want to look at previously submitted responses how does the renderer handle missing / extra fields?

The React Form Renderer component is a client-side component that renders the provided form schema as a runtime form. If the form schema changes, the backend application must be updated to handle any added, modified, or removed fields accordingly.

Is there support for dates forms?

Yes, the Form Builder and Form Renderer components support the DatePicker, DateTimePicker, DateRangePicker, and TimePicker controls, enabling you to create date- and time-based forms with ease.

I didn’t understand exactly how to load and bind the available options for a dropdown for example from a api?

The Dropdown List component in the Form Builder and Form Renderer supports binding data from remote data sources. For detailed instructions on configuring remote data binding, refer to the documentation link below.

Loading Remote Data in React Form Builder and Renderer

Conclusion

Syncfusion Form Builder and Form Renderer separate visual form design from runtime rendering through a reusable JSON schema. This approach helps teams create and maintain configurable forms while reducing the need to rebuild individual runtime fields when requirements change.

Read the whole story
alvinashcraft
49 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

A Who's Who and a What's What of GDPR

1 Share

A Who's Who and a What's What of GDPR

TL;DR: GDPR affects any organization that collects or processes personal data from individuals in the EU. This article introduces the key GDPR concepts, including personal data, anonymized data, and special category data, while explaining the roles of data controllers, processors, data subjects, DPOs, and GDPR representatives. It provides a practical foundation for understanding how modern data protection regulations work and why compliance matters.

The General Data Protection Regulation (GDPR) is the European Union’s comprehensive law that sets strict rules for how organizations collect, use, and protect EU citizens’ personal data, regardless of where the organization is based. It establishes individual rights, mandates accountability, and turns data privacy from a best practice into a legal obligation with global reach.

“Who’s Who and a What’s What of GDPR” refers to understanding who the key roles are in the General Data Protection Regulation, such as data subjects, controllers, and processors, and what the important GDPR concepts are, like personal data, anonymized data, and more.

What’s What: Key Concepts

Personal Data

Personal data is any information that relates to an individual who can be directly or indirectly identified. Names, email addresses, credit card numbers, date of birth, etcetera are probably the first that come to mind when you think of the definition of personal data. However, location information, such as IP address, or other online identifiers, such as cookie ID, can also be personal data.

Anonymized Data

Anonymized data is personal data that, through the use of technology, has been rendered anonymous so that it is no longer possible to identify an individual through the data, either directly or indirectly, or in combination with other data.

Anonymized data is not personal data and is therefore not covered by the GDPR -provided that the personal data has been anonymized in accordance with the three criteria laid down by the European Data Protection Authorities.

Special Category Data

GDPR classifies the following types of personal data as potentially more sensitive and provides them with additional protection:

The special categories of personal data are:

  • Personal data about racial or ethnic origin.

  • Personal data about political opinions.

  • Personal data about religious or philosophical beliefs.

  • Personal data about trade union membership.

  • Genetic data.

  • Biometric data (where used for identification purposes)—this could be data such as fingerprints or retina scans.

  • Data concerning health.

These types of personal data merit specific protection and must be handled with greater care, as using them could create significant risks to an individual’s fundamental rights and freedoms or expose them to discrimination.

Who’s Who: Key Roles

Data Controller

The data controller determines the purposes for which and how personal data is processed. So, if your company or organization decides why and how the personal data should be processed, it is the data controller. Employees process personal data within your organization to fulfill their tasks as data controllers.

Data Processor

A data processor is the individual (other than an employee of the controller) or the legal person that carries out processing activities, on behalf of and in accordance with the controller’s instructions. In other words, the data controller can provide personal data to the data processor to carry out such processing activities on its behalf. A legal agreement governs arrangements between the data controller and the data processor.

Data Subject

A data subject is any individual whose personal data is being collected, processed, or stored. This could include names, email addresses, ID numbers, IP addresses, biometric data, and anything else covered under GDPR’s definition of personal data. Under regulations like GDPR, the data subject is the individual the data refers to and is central to modern data protection laws.

Data Protection Officer

Some data controllers must have a Data Protection Officer (DPO), while others choose to appoint a DPO (or an assigned individual) to handle data protection matters on their behalf. Individuals can also contact the DPO with data protection queries or concerns. If a company has no DPO, other people in the company will address any data protection queries or concerns on behalf of the data controller. Note that these individuals are not data controllers themselves; they are acting on behalf of the data controller.

GDPR Representative

If you do not have an office in the EU/EEA but still process data from individuals based in the EU/EEA, then you still need to comply with the GDPR regarding your data processing, and the GDPR requires you to appoint a representative. This representative must be based in an EU or EEA state where some of the individuals whose personal data you process are located.

You must authorize the representative in writing to act on your behalf for GDPR compliance. Be aware that a Data Representative is not a Data Protection Officer (DPO). It has a distinct role with its own responsibilities. The representative’s role is to ensure that you comply with the GDPR by enabling communication with individuals in Europe and European data protection authorities.

You should provide details of your representative to EEA-based individuals whose personal data you process, typically by including the contact details in your privacy policy. The representative must also be able to act on your behalf with European data protection authorities.

Conclusion

As we’ve explored, GDPR is more than just a set of rules; it’s a fundamental shift in how we approach data protection. It empowers individuals, holds organizations accountable, and aims to create a safer digital environment for all of us. Whether you’re an individual concerned about your privacy or a business striving for compliance, understanding GDPR is crucial in today’s data-driven world.

GDPR compliance is an ongoing journey. It requires continuous attention, adaptation, and improvement. But by embracing its principles and implementing robust data protection practices, we can all contribute to a digital landscape where personal data is respected and protected.

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