GS1 Sunrise 2027: Shifting to 2D barcodes for global commerce

Blog category: Barcode.NET

August 07, 2025

GS1 Sunrise 2027 is a global project to transition from traditional one-dimensional (1D) EAN/UPC barcodes to two-dimensional (2D) barcodes to improve product transparency, traceability and security. By the end of 2027, retail, healthcare and other businesses around the world are expected to be required to implement new product identification standards at their points of sale (POS) and service (POC). Already in testing in 48 countries, covering 88% of global GDP, the Sunrise 2027 initiative is becoming the new norm for global trade.

VintaSoft, as the developer of a specialized tool for barcode recognition - VintaSoft Barcode .NET SDK, views these changes as a strategic opportunity to modernize customers' business processes and expand the capabilities of the SDK in the new regulatory environment.



What is GS1 Sunrise 2027

Sunrise 2027 is a GS1 initiative officially announced in the 2020s, with the goal of ensuring that by 2027, retail and logistics systems around the world will be able to scan and interpret 2D barcodes alongside the familiar 1D ones. However, the main goal is to replace 1D formats with more versatile 2D ones, which are capable of not only identifying a product, but also transmitting additional data - expiration date, batch number, country of origin, quality certificates, etc.


Why the entire industry is switching

The old EAN/UPC format proved to be limited:

2D barcodes such as GS1 DataMatrix and GS1 Digital Link QR solve these problems by allowing:


How will this affect market participants?

The transition to 2D barcodes initiated by GS1 will affect almost all participants in the commodity chain - from manufacturers to software developers. These changes cannot be considered a simple technical upgrade - we are talking about the restructuring of fundamental processes in logistics, retail and interaction with consumers.

Manufacturing companies will be among the first to feel the impact of the new standard. They will have to adapt production lines and packaging processes to print the new barcodes. Whereas previously it was enough to apply a linear barcode with GTIN to the packaging, now the 2D format will need to include much more information: expiration date, batch number, composition information, and sometimes even a link to a digital certificate or website. All this requires upgrading both the equipment and the IT infrastructure that ensures the generation and management of the new barcodes.

For retailers and logistics operators, the main challenge will be the need to adapt cash register and warehouse scanning devices. Although most modern scanners already support 2D barcodes, not all of them are optimized for GS1 standards. This means that not only will the equipment need to be updated, but also the software will need to be modified to correctly recognize and process new data fields.

Developers of software solutions, including those creating accounting systems, ERP, cash register applications and mobile solutions, must also prepare for the change in barcoding formats. It is necessary not only to add support for new symbol systems, but also to implement the correct interpretation of the data structure according to GS1 standards. This includes processing application identifiers (AI), parsing nested fields and, in the case of using the GS1 Digital Link format, interaction with external web services. Here, the accuracy of recognition is especially important, since an error in data interpretation can lead to failures in logistics, returns and even legal consequences.


What makes a 2D barcode special

2D barcodes are the next evolution in automatic identification systems. They not only replace linear barcodes, but also open up new opportunities for business, production and logistics due to their versatility and information richness.

Unlike 1D barcodes (e.g. EAN/UPC), which can only contain a basic product identifier (GTIN), 2D barcodes are capable of conveying a whole range of parameters required for modern supply chains and digital services.

The main advantages of 2D barcodes include:

The transition to a new barcoding system encourages businesses not only to comply with standards, but also to build digital ecosystems that connect physical packaging and online experiences.


GS1 Sunrise 2027 implementation stages

Information and voluntary stage

Knowledge dissemination, pilot projects, adaptation of internal systems, testing of dual labeling (1D + 2D). Companies get time to modernize and test technologies.


Mandatory implementation by industry and region

Transition to mandatory use of 2D barcodes for certain product categories and territories. The main focus is updating POS equipment, training personnel, ensuring the compatibility of supply chains.


Full compliance and integration

By the end of 2027, all enterprises covered by the standard must completely switch to 2D barcodes - up to replacing classic EAN/UPC where possible. Constant updating of standards and their support.


Challenges and solutions during the transition

The transition from traditional linear barcodes to 2D formats is not only a technological upgrade, but also an organizational challenge. Companies face a number of practical, technical, and regulatory challenges, especially if their infrastructure is still dominated by legacy scanning, printing, or barcode processing solutions.

The most common difficulties include:

Despite these challenges, proper planning and choosing the right tools can make the transition much easier.

Key solutions that are recommended to be applied in practice:

The transition to 2D barcodes is a project that requires a comprehensive approach, but with modern tools and partners, it becomes not only feasible, but also profitable in terms of business development prospects.


How VintaSoft Barcode .NET SDK helps businesses comply with GS1 Sunrise 2027

VintaSoft's product — VintaSoft Barcode .NET SDK — solves problems of fast and accurate recognition of both one-dimensional and two-dimensional barcodes, including DataMatrix and QR Code barcodes. This allows companies to:

The transition to GS1 Sunrise 2027 promotes digitalization, transparency and security in the modern supply chain. It is important to prepare for changes now, modernize marking and recognition tools - by investing in solutions such as VintaSoft Barcode .NET SDK for efficient reading and processing of new 2D barcodes.


Here is a C# code that demonstrates how to generate a GS1 Digital Link barcode and recognize the generated barcode.
using System;
using System.Text;

using Vintasoft.Barcode;
using Vintasoft.Barcode.BarcodeInfo;
using Vintasoft.Barcode.SymbologySubsets;
using Vintasoft.Barcode.GS1;
using Vintasoft.Imaging;

/// <summary>
/// Test that shows how to encode the barcode data in GS1 Digital Link format,
/// create image with GS1 Digital Link barcode,
/// read GS1 Digital Link barcode from image and print data stored in GS1 format.
/// </summary>
class GS1DigitalLinkExample
{

    /// <summary>
    /// Runs the test (available barcode types QR, DataMatrix).
    /// </summary>
    public static void TestGS1DigitalLink(BarcodeType digitalLinkBarcodeType)
    {
        // GS1 Digital Link barcode
        GS1DigitalLinkBarcodeSymbologySubset barcodeSubset;
        if (digitalLinkBarcodeType == BarcodeType.QR)
            barcodeSubset = BarcodeSymbologySubsets.GS1DigitalLinkQR;
        else if (digitalLinkBarcodeType == BarcodeType.DataMatrix)
            barcodeSubset = BarcodeSymbologySubsets.GS1DigitalLinkDataMatrix;
        else
            throw new NotSupportedException();

        // form the GS1 Application identifiers
        //
        GS1ApplicationIdentifierValue[] aiValues = new GS1ApplicationIdentifierValue[4];
        GS1ApplicationIdentifier ai;
        // 01 - Global Trade Item Number
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("01");
        aiValues[0] = new GS1ApplicationIdentifierValue(ai, "0123456789123C");
        // 310 - Net weight, kilograms
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("310");
        aiValues[1] = new GS1ApplicationIdentifierValue(ai, "0012.55");
        // 30 - Count of Items
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("30");
        aiValues[2] = new GS1ApplicationIdentifierValue(ai, "10");
        // 90 - Company Internal Information
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("90");
        aiValues[3] = new GS1ApplicationIdentifierValue(ai, "ABCabc12345");
        // create GS1 value item
        GS1DigitalLinkValueItem gs1DigitalLinkValue = new GS1DigitalLinkValueItem(new GS1DigitalLink("vintasoft.com", aiValues));

        // create the barcode writer
        using (BarcodeWriter writer = new BarcodeWriter())
        {
            // specify that writer must create output image as 24-bpp image
            writer.Settings.PixelFormat = BarcodeImagePixelFormat.Bgr24;

            // encode GS1 Digital Link barcode
            barcodeSubset.Encode(gs1DigitalLinkValue, writer.Settings);

            // create image with barcode
            using (VintasoftBitmap barcodeImage = writer.GetBarcodeAsVintasoftBitmap())
            {
                // delete aiValues array
                aiValues = null;

                // read barcode with GS1 value

                // create barcode reader
                using (BarcodeReader reader = new BarcodeReader())
                {
                    // specify that reader must search for GS1 Digital Link barcodes only

                    reader.Settings.ScanBarcodeTypes = BarcodeType.None;
                    reader.Settings.ScanBarcodeSubsets.Add(barcodeSubset);

                    // read barcode from image
                    IBarcodeInfo[] infos = reader.ReadBarcodes(barcodeImage);

                    // gets GS1 value from barcode value
                    gs1DigitalLinkValue = (GS1DigitalLinkValueItem)(infos[0].ValueItems[0]);

                    // print barcode type
                    Console.WriteLine("Barcode Type: {0}", infos[0].BarcodeType);
                    Console.WriteLine();

                    // print GS1 Digital Link URI value
                    Console.WriteLine("GS1 Digital Link URI:\n{0}", gs1DigitalLinkValue.DigitalLink.DigitalLinkUri);
                    Console.WriteLine();

                    // gets a GS1 Application identifiers from barcode value
                    aiValues = gs1DigitalLinkValue.ApplicationIdentifierValues;

                    StringBuilder printableValue = new StringBuilder();
                    // print Application identifiers values
                    for (int i = 0; i < aiValues.Length; i++)
                    {
                        GS1ApplicationIdentifierValue aiValue = aiValues[i];
                        ai = aiValue.ApplicationIdentifier;
                        Console.WriteLine(string.Format("[{0}] {1}", i + 1, aiValue));
                        Console.WriteLine(string.Format("Application identifier   : {0}", ai.ApplicationIdentifier));
                        Console.WriteLine(string.Format("Value                    : {0}", aiValue.Value));
                        Console.WriteLine(string.Format("Data title               : {0}", ai.DataTitle));
                        Console.WriteLine(string.Format("Data content             : {0}", ai.DataContent));
                        Console.WriteLine(string.Format("Format                   : {0}", ai.Format));
                        Console.WriteLine(string.Format("Is contains decimal point: {0}", ai.IsContainsDecimalPoint));
                        Console.WriteLine(string.Format("Is variable length       : {0}", ai.IsVariableLength));
                        Console.WriteLine();
                        printableValue.Append(aiValue.ToString());
                    }

                    // print GS1 printable value
                    Console.WriteLine("Printable GS1 value: " + printableValue.ToString());
                }
            }
        }
    }
}