First time, you must create a file extension_attributes.xml

> Vendor\Namespace\etc\extension_attributes.xml

    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Quote\Api\Data\CartInterface">
        <attribute code="from_app" type="string"/>
    </extension_attributes>
</config>

Then, you have to change the behavior of the **get()**, **getList()** and **save()** function of the repository.

> Vendor\Namespace\etc\extension_attributes.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Quote\Api\CartRepositoryInterface">
        <plugin name="vendor_namespace_plugin_cart_repository" type="Vendor\Namespace\Plugin\CartRepositoryPlugin"/>
    </type>
</config>

 
Having the field in the table of DB **quote**, you can directly save the data by the magic method. If you do this, in the plugin of below, you do not need the function **beforSave().**

    $quote->setFromApp(true);
    $this->quoteRepository->save($quote);

You can do on this way also, in which, the function **beforeSave()** of the plugin of below is mandatory.

    $quote = $this->quoteRepository->getActive($cartId);

    // Extension Attributes
    $quoteExtension = $quote->getExtensionAttributes();
    $quoteExtension->setFromApp(true);
    $quote->setExtensionAttributes($quoteExtension);

    $this->quoteRepository->save($quote);


> Vendor\Namespace\Plugin\CartRepositoryPlugin

    <?php
    namespace Vendor\Namespace\Plugin;
    
    use Magento\Quote\Api\CartRepositoryInterface;
    use Magento\Quote\Api\Data\CartExtension;
    use Magento\Quote\Api\Data\CartExtensionFactory;
    use Magento\Quote\Api\Data\CartInterface;
    use Magento\Quote\Api\Data\CartSearchResultsInterface;
    
    /**
     * Class CartRepositoryPlugin
     */
    class CartRepositoryPlugin
    {
        /**
         * @var CartExtensionFactory
         */
        private $extensionFactory;
    
        /**
         * CartRepositoryPlugin constructor.
         *
         * @param CartExtensionFactory $orderExtensionFactory
         */
        public function __construct(
            CartExtensionFactory $orderExtensionFactory
        ) {
            $this->extensionFactory = $orderExtensionFactory;
        }
    
        /**
         * @param CartRepositoryInterface $subject
         * @param CartInterface $resultEntity
         * @return CartInterface
         * @SuppressWarnings(PHPMD.UnusedFormalParameter)
         */
        public function afterGet(
            CartRepositoryInterface $subject,
            CartInterface $resultEntity
        ) {
            /** @var CartExtension $extensionAttributes */
            $extensionAttributes = $resultEntity->getExtensionAttributes() ?: $this->extensionFactory->create();
    
            $extensionAttributes->setFromApp($resultEntity->getData('from_app'));
    
            $resultEntity->setExtensionAttributes($extensionAttributes);
    
            return $resultEntity;
        }
    
        /**
         * @param CartRepositoryInterface $subject
         * @param CartSearchResultsInterface $resultCart
         * @return CartSearchResultsInterface
         */
        public function afterGetList(
            CartRepositoryInterface $subject,
            CartSearchResultsInterface $resultCart
        ) {
            /** @var CartInterface $order */
            foreach ($resultCart->getItems() as $order) {
                $this->afterGet($subject, $order);
            }
    
            return $resultCart;
        }
    
        /**
         * @param CartRepositoryInterface $subject
         * @param CartInterface $result
         * @return array
         */
        public function beforeSave(
            CartRepositoryInterface $subject,
            CartInterface $quote
        ) {
            $extensionAttributes = $quote->getExtensionAttributes() ?: $this->extensionFactory->create();
            if ($extensionAttributes !== null && $extensionAttributes->getFromApp() !== null) {
                $quote->setFromApp($extensionAttributes->getFromApp());
            }
    
            return [$quote];
        }
    }

How you can look, the function **beforeSave()** use the magic method **setFromApp()** to save the data, instead of this, you can use the magic method directly to save the quote how I explained before. 

If the data were in another table of DB with its own model, the function of the plugin will be **afterSave()** and it will seem similar to this.

    /**
     * @param CartRepositoryInterface $subject
     * @param CartInterface $result
     * @return CartInterface
     */
    public function afterSave(
        CartRepositoryInterface $subject,
        CartInterface $result
    ) {
        $extensionAttributes = $result->getExtensionAttributes() ?: $this->storeExtensionFactory->create();
        if ($extensionAttributes !== null && $extensionAttributes->getFromApp() !== null) {
            /** @var CustomEntity $customEntity */
            $customEntity = $this->customEntityFactory->create();
            $customEntity->setQuoteId($result->getId());
            $customEntity->setFromApp($result->getFromApp());
            $this->customEntityRepository->save($customEntity);
        }

        return $result;
    }