[{"data":1,"prerenderedAt":994},["ShallowReactive",2],{"/blog/lessons-weet-learned-lokalise":3,"navigation-en-us":210,"banner-en-us":637,"footer-en-us":647,"blog-post-authors-en-us-Alexander Pereverzevs":891,"blog-related-posts-en-us-lessons-weet-learned-lokalise":905,"blog-promotions-en-us":930,"next-steps-en-us":984},{"id":4,"title":5,"authors":6,"body":8,"category":188,"date":189,"description":190,"extension":191,"externalUrl":192,"faq":192,"featured":193,"heroImage":194,"meta":195,"navigation":196,"path":197,"seo":198,"slug":202,"stem":203,"tags":204,"template":208,"updatedDate":192,"__hash__":209},"blogPosts/en-us/blog/lessons-weet-learned-lokalise.md","How Weet integrates localization into the GitLab pipeline with Lokalise",[7],"Alexander Pereverzevs",{"type":9,"value":10,"toc":179},"minimark",[11,15,25,30,38,41,44,47,51,54,64,67,70,78,81,90,94,97,105,108,111,118,125,128,132,135,153,156,163,166,170,173,176],[12,13,14],"p",{},"As a GitLab customer, Weet has fully invested in the premise of \"Iterate faster, innovate together.\" Weet has a low tolerance for processes that don't keep pace with the way they develop and launch. One important process that was slowing the business down – localizing their app.",[12,16,17,18,24],{},"Localization is a key way to drive growth and accelerate product adoption. When done poorly, localization or l10n, as it's commonly known, can slow down your development process, introduce bugs, and make it cumbersome to launch updates. When done right, teams can smooth out the process and ",[19,20,23],"a",{"href":21,"rel":22},"https://lokalise.com/features/localization-process-automation",[],"continuously localize"," their app. We unpack how Weet conquered its localization problems using GitLab and Lokalise.",[26,27,29],"h2",{"id":28},"what-is-weet","What is Weet?",[12,31,32,37],{},[19,33,36],{"href":34,"rel":35},"https://beeweet.com",[],"Weet"," is an asynchronous video communication tool designed to reduce the need for meetings. By combining video, audio, and screen sharing, it provides the nuance that written communication simply does not. For example, Weet's 10-person team, which is spread between France and the US, uses the product to speed through code reviews. The product has also been used for demos, design feedback, bug reports, QA reviews, and client presentations. At Lokalise, we use the tool to communicate with team members across time zones with ease and clarity.",[12,39,40],{},"Weet started using GitLab five years ago and is using the latest version (13.11 as of this writing). For the runner they use 13.11 too, with an auto-scalable configuration (best feature ever!). The instance is self-managed on Google Cloud.",[12,42,43],{},"Weet uses roughly 50 pipelines to manage processes such as: building the entire stack of the Weet application, checking the unit tests, deploying to a QA environment, deploying in production, launching the end-to-end tests, and more. The company currently has 17 projects set up, which are combined with GitLab CI/CD to deploy the Weet application.",[12,45,46],{},"They are, in summary... GitLab fans.",[26,48,50],{"id":49},"the-first-l10n-solution","The first l10n solution",[12,52,53],{},"When Weet first started localizing their app the engineering team considered two options:",[55,56,57,61],"ol",{},[58,59,60],"li",{},"Download CSV files of strings, email them to the translators, and then reintegrate the data after the translation work was complete",[58,62,63],{},"Translate directly in the IDE",[12,65,66],{},"Both options had their drawbacks. Downloading and uploading files takes developers out of the flow, but worse than that, the process can introduce l10n bugs that make the app look unreliable or amateurish. Also, these problems take time to resolve. It's not uncommon for version control to be an issue with this type of system.",[12,68,69],{},"Weet chose the Web IDE option because it was easier to get started, but the process wasn't working at the pace they wanted.",[71,72,73],"blockquote",{},[71,74,75],{},[12,76,77],{},"\"Before we used the Lokalise integration, we had to validate the new wording before each code push. The process was time-consuming as approvers were spread across different time zones,\" - Geraud Bonou-Selegbe, Full-stack engineer at Weet.",[12,79,80],{},"Hunting through the code to change all the instances of a word that needs to be replaced is not high on anyone's list of fun things to do.",[12,82,83,84,89],{},"It wasn't long before Jeremy Rouet, the CTO and co-founder of Weet, started looking for new options. If they wanted to fulfill the CI/CD promise of GitLab, they needed a tool that would integrate cleanly into the pipeline. Jeremy began testing translation management systems (TMS) and settled on integrating ",[19,85,88],{"href":86,"rel":87},"https://docs.lokalise.com/en/articles/1789855-gitlab",[],"Lokalise with GitLab",".",[26,91,93],{"id":92},"how-to-continuously-localize-your-product","How to continuously localize your product",[12,95,96],{},"Lokalise integrates into GitLab and allows a user (like Weet) to pull files into Lokalise, where translation tasks can be assigned and completed and then easily merged back.",[12,98,99,104],{},[100,101],"img",{"alt":102,"src":103},"Schema of how Lokalise works in GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398643/blog/Content%20Images/lokalize1.png","\nA schema of how Lokalise works in GitLab.",[12,106,107],{},"Developers code as normal aiming to complete their work prior to each weekly release. Each push on master sends text strings automatically into Lokalise. Lokalise detects any changes to the text, so the developers don't have to remember what exactly they changed. Jeremy then uses the task features in Lokalise to assign the translation tasks to the Weet marketing team, who then go in and check all the new words.",[12,109,110],{},"Once the translation team is done, they create a merge request, and the product is ready to launch.",[71,112,113],{},[71,114,115],{},[12,116,117],{},"\"Lokalise enabled us to bridge this gap by letting developers do what they do the best: coding. If my phrasing is not perfect, language experts can review it on Lokalise and then send a merge request with their updates. Now we've got the right expert in the right place for each milestone of our development process,\" says Geraud.",[12,119,120,124],{},[100,121],{"alt":122,"src":123},"Lokalise Merge Request in GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398644/blog/Content%20Images/lokalize2.png","\nWhat a merge request looks like using Lokalise and GitLab.",[12,126,127],{},"Gone are the days of manually updating translations in the IDE in order to fix phrasing. Now app localization is a seamless and reliable part of the development workflow of the CI/CD process that is built around GitLab.",[26,129,131],{"id":130},"steps-to-set-up-the-integration","Steps to set up the integration",[12,133,134],{},"Full instructions are available here. With over 500 keys in the app, the Weet team created several internal processes to keep their work tidy.\nOne move they made was to split their localization data into 5 projects/files. Each localization is a .json file. The separate files are:",[136,137,138,141,144,147,150],"ul",{},[58,139,140],{},"emails",[58,142,143],{},"frontend",[58,145,146],{},"integration",[58,148,149],{},"server-side rendering",[58,151,152],{},"mobile – iOS/Android (WIP)",[12,154,155],{},"Then to simplify key maintenance they used a naming pattern so that each component has its own keys. When they delete a component, they simply remove the main key from the localization file, which removes each label for this component. See below:",[12,157,158,162],{},[100,159],{"alt":160,"src":161},"Deleting a component and removing main key from the localization file","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398644/blog/Content%20Images/lokalize3.png","\nHow to delete a component and remove the main key from the localization file.",[12,164,165],{},"Finally, they tackled conflicts. The developers are able to edit the localization files both in Lokalise and in their environment. Changes in multiple systems could clash. To solve this problem, they decided that developers can only use Lokalise to update labels and they can only add or remove keys in their local environment.",[26,167,169],{"id":168},"what-localization-delivers","What localization delivers",[12,171,172],{},"It took the Weet team some time and trial and error to smooth out the process.",[12,174,175],{},"Now that the process is totally seamless, they can localize a new release in less than an hour with just a short quality check. That’s a big improvement from the days when they had to synchronize the dev, PO, and QA teams over a few days, to check and correct the new localization.",[12,177,178],{},"With their ability to continuously localize their app, they can focus on developing and delivering the best product possible. And it seems to be working as they were recently voted the #2 (closed) product of the week on Product Hunt. Coming up on the roadmap – mobile apps and more languages.",{"title":180,"searchDepth":181,"depth":181,"links":182},"",2,[183,184,185,186,187],{"id":28,"depth":181,"text":29},{"id":49,"depth":181,"text":50},{"id":92,"depth":181,"text":93},{"id":130,"depth":181,"text":131},{"id":168,"depth":181,"text":169},"devsecops","2021-09-13","Localization is an increasingly important option for users. Here's how to integrate localization in your GitLab pipeline.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668543/Blog/Hero%20Images/lokalise_cover.png",{},true,"/en-us/blog/lessons-weet-learned-lokalise",{"title":5,"description":190,"ogTitle":5,"ogDescription":190,"noIndex":193,"ogImage":194,"ogUrl":199,"ogSiteName":200,"ogType":201,"canonicalUrls":199},"https://about.gitlab.com/blog/lessons-weet-learned-lokalise","https://about.gitlab.com","article","lessons-weet-learned-lokalise","en-us/blog/lessons-weet-learned-lokalise",[205,206,207],"collaboration","integrations","open source","BlogPost","5KtlIZ-uLhNuOY9OvrhI-lXbs1X-GjS9m0Ry0UIGEyc",{"logo":211,"freeTrial":216,"sales":221,"login":226,"items":231,"search":557,"minimal":588,"duo":607,"switchNav":616,"pricingDeployment":627},{"config":212},{"href":213,"dataGaName":214,"dataGaLocation":215},"/","gitlab logo","header",{"text":217,"config":218},"Get free trial",{"href":219,"dataGaName":220,"dataGaLocation":215},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":222,"config":223},"Request a demo",{"href":224,"dataGaName":225,"dataGaLocation":215},"/sales/?contact-topic=request-demo","sales",{"text":227,"config":228},"Sign in",{"href":229,"dataGaName":230,"dataGaLocation":215},"https://gitlab.com/users/sign_in/","sign in",[232,261,361,366,479,535],{"text":233,"config":234,"menu":236},"Platform",{"dataNavLevelOne":235},"platform",{"type":237,"columns":238},"cards",[239,245,253],{"title":233,"description":240,"link":241},"The intelligent orchestration platform for DevSecOps",{"text":242,"config":243},"Explore our Platform",{"href":244,"dataGaName":235,"dataGaLocation":215},"/platform/",{"title":246,"description":247,"link":248},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":249,"config":250},"Meet GitLab Duo",{"href":251,"dataGaName":252,"dataGaLocation":215},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":254,"description":255,"link":256},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":257,"config":258},"Learn more",{"href":259,"dataGaName":260,"dataGaLocation":215},"/why-gitlab/","why gitlab",{"text":262,"left":196,"config":263,"menu":265},"Product",{"dataNavLevelOne":264},"solutions",{"type":266,"link":267,"columns":271,"feature":340},"lists",{"text":268,"config":269},"View all Solutions",{"href":270,"dataGaName":264,"dataGaLocation":215},"/solutions/",[272,296,319],{"title":273,"description":274,"link":275,"items":280},"Automation","CI/CD and automation to accelerate deployment",{"config":276},{"icon":277,"href":278,"dataGaName":279,"dataGaLocation":215},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[281,285,288,292],{"text":282,"config":283},"CI/CD",{"href":284,"dataGaLocation":215,"dataGaName":282},"/solutions/continuous-integration/",{"text":246,"config":286},{"href":251,"dataGaLocation":215,"dataGaName":287},"gitlab duo agent platform - product menu",{"text":289,"config":290},"Source Code Management",{"href":291,"dataGaLocation":215,"dataGaName":289},"/solutions/source-code-management/",{"text":293,"config":294},"Automated Software Delivery",{"href":278,"dataGaLocation":215,"dataGaName":295},"Automated software delivery",{"title":297,"description":298,"link":299,"items":304},"Security","Deliver code faster without compromising security",{"config":300},{"href":301,"dataGaName":302,"dataGaLocation":215,"icon":303},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[305,309,314],{"text":306,"config":307},"Application Security Testing",{"href":301,"dataGaName":308,"dataGaLocation":215},"Application security testing",{"text":310,"config":311},"Software Supply Chain Security",{"href":312,"dataGaLocation":215,"dataGaName":313},"/solutions/supply-chain/","Software supply chain security",{"text":315,"config":316},"Software Compliance",{"href":317,"dataGaName":318,"dataGaLocation":215},"/solutions/software-compliance/","software compliance",{"title":320,"link":321,"items":326},"Measurement",{"config":322},{"icon":323,"href":324,"dataGaName":325,"dataGaLocation":215},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[327,331,335],{"text":328,"config":329},"Visibility & Measurement",{"href":324,"dataGaLocation":215,"dataGaName":330},"Visibility and Measurement",{"text":332,"config":333},"Value Stream Management",{"href":334,"dataGaLocation":215,"dataGaName":332},"/solutions/value-stream-management/",{"text":336,"config":337},"Analytics & Insights",{"href":338,"dataGaLocation":215,"dataGaName":339},"/solutions/analytics-and-insights/","Analytics and insights",{"title":341,"type":266,"items":342},"GitLab for",[343,349,355],{"text":344,"config":345},"Enterprise",{"icon":346,"href":347,"dataGaLocation":215,"dataGaName":348},"Building","/enterprise/","enterprise",{"text":350,"config":351},"Small Business",{"icon":352,"href":353,"dataGaLocation":215,"dataGaName":354},"Work","/small-business/","small business",{"text":356,"config":357},"Public Sector",{"icon":358,"href":359,"dataGaLocation":215,"dataGaName":360},"Organization","/solutions/public-sector/","public sector",{"text":362,"config":363},"Pricing",{"href":364,"dataGaName":365,"dataGaLocation":215,"dataNavLevelOne":365},"/pricing/","pricing",{"text":367,"config":368,"menu":370},"Resources",{"dataNavLevelOne":369},"resources",{"type":266,"link":371,"columns":375,"feature":468},{"text":372,"config":373},"View all resources",{"href":374,"dataGaName":369,"dataGaLocation":215},"/resources/",[376,408,435],{"title":377,"items":378},"Getting started",[379,384,389,394,399,404],{"text":380,"config":381},"Install",{"href":382,"dataGaName":383,"dataGaLocation":215},"/install/","install",{"text":385,"config":386},"Quick start guides",{"href":387,"dataGaName":388,"dataGaLocation":215},"/get-started/","quick setup checklists",{"text":390,"config":391},"Learn",{"href":392,"dataGaLocation":215,"dataGaName":393},"https://university.gitlab.com/","learn",{"text":395,"config":396},"Product documentation",{"href":397,"dataGaName":398,"dataGaLocation":215},"https://docs.gitlab.com/","product documentation",{"text":400,"config":401},"Best practice videos",{"href":402,"dataGaName":403,"dataGaLocation":215},"/getting-started-videos/","best practice videos",{"text":405,"config":406},"Integrations",{"href":407,"dataGaName":206,"dataGaLocation":215},"/integrations/",{"title":409,"items":410},"Discover",[411,416,421,426,430],{"text":412,"config":413},"Customer success stories",{"href":414,"dataGaName":415,"dataGaLocation":215},"/customers/","customer success stories",{"text":417,"config":418},"Blog",{"href":419,"dataGaName":420,"dataGaLocation":215},"/blog/","blog",{"text":422,"config":423},"Demo Hub",{"href":424,"dataGaName":425,"dataGaLocation":215},"/demo-hub/","demo hub",{"text":427,"config":428},"The Source",{"href":429,"dataGaName":420,"dataGaLocation":215},"/the-source/",{"text":431,"config":432},"Remote",{"href":433,"dataGaName":434,"dataGaLocation":215},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":436,"items":437},"Connect",[438,443,448,453,458,463],{"text":439,"config":440},"GitLab Services",{"href":441,"dataGaName":442,"dataGaLocation":215},"/services/","services",{"text":444,"config":445},"Contribute",{"href":446,"dataGaName":447,"dataGaLocation":215},"https://contributors.gitlab.com","contribute",{"text":449,"config":450},"Community",{"href":451,"dataGaName":452,"dataGaLocation":215},"/community/","community",{"text":454,"config":455},"Forum",{"href":456,"dataGaName":457,"dataGaLocation":215},"https://forum.gitlab.com/","forum",{"text":459,"config":460},"Events",{"href":461,"dataGaName":462,"dataGaLocation":215},"/events/","events",{"text":464,"config":465},"Partners",{"href":466,"dataGaName":467,"dataGaLocation":215},"/partners/","partners",{"config":469,"title":472,"text":473,"link":474},{"background":470,"textColor":471},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":475,"config":476},"Read the latest",{"href":477,"dataGaName":478,"dataGaLocation":215},"/whats-new/","whats new",{"text":480,"config":481,"menu":483},"Company",{"dataNavLevelOne":482},"company",{"type":266,"columns":484},[485],{"items":486},[487,492,498,500,505,510,515,520,525,530],{"text":488,"config":489},"About",{"href":490,"dataGaName":491,"dataGaLocation":215},"/company/","about",{"text":493,"config":494,"footerGa":497},"Jobs",{"href":495,"dataGaName":496,"dataGaLocation":215},"/jobs/","jobs",{"dataGaName":496},{"text":459,"config":499},{"href":461,"dataGaName":462,"dataGaLocation":215},{"text":501,"config":502},"Leadership",{"href":503,"dataGaName":504,"dataGaLocation":215},"/company/team/e-group/","leadership",{"text":506,"config":507},"Handbook",{"href":508,"dataGaName":509,"dataGaLocation":215},"https://handbook.gitlab.com/","handbook",{"text":511,"config":512},"Investor relations",{"href":513,"dataGaName":514,"dataGaLocation":215},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":516,"config":517},"Trust Center",{"href":518,"dataGaName":519,"dataGaLocation":215},"/security/","trust center",{"text":521,"config":522},"AI Transparency Center",{"href":523,"dataGaName":524,"dataGaLocation":215},"/ai-transparency-center/","ai transparency center",{"text":526,"config":527},"Newsletter",{"href":528,"dataGaName":529,"dataGaLocation":215},"/company/contact/#contact-forms","newsletter",{"text":531,"config":532},"Press",{"href":533,"dataGaName":534,"dataGaLocation":215},"/press/","press",{"text":536,"config":537,"menu":538},"Contact us",{"dataNavLevelOne":482},{"type":266,"columns":539},[540],{"items":541},[542,547,552],{"text":543,"config":544},"Talk to sales",{"href":545,"dataGaName":546,"dataGaLocation":215},"/sales/","talk to sales",{"text":548,"config":549},"Support portal",{"href":550,"dataGaName":551,"dataGaLocation":215},"https://support.gitlab.com/hc/en-us","support portal",{"text":553,"config":554},"Customer portal",{"href":555,"dataGaName":556,"dataGaLocation":215},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":558,"login":559,"suggestions":566},"Close",{"text":560,"link":561},"To search repositories and projects, login to",{"text":562,"config":563},"gitlab.com",{"href":229,"dataGaName":564,"dataGaLocation":565},"search login","search",{"text":567,"default":568},"Suggestions",[569,571,575,577,581,585],{"text":246,"config":570},{"href":251,"dataGaName":246,"dataGaLocation":565},{"text":572,"config":573},"Code Suggestions (AI)",{"href":574,"dataGaName":572,"dataGaLocation":565},"/solutions/code-suggestions/",{"text":282,"config":576},{"href":284,"dataGaName":282,"dataGaLocation":565},{"text":578,"config":579},"GitLab on AWS",{"href":580,"dataGaName":578,"dataGaLocation":565},"/partners/technology-partners/aws/",{"text":582,"config":583},"GitLab on Google Cloud",{"href":584,"dataGaName":582,"dataGaLocation":565},"/partners/technology-partners/google-cloud-platform/",{"text":586,"config":587},"Why GitLab?",{"href":259,"dataGaName":586,"dataGaLocation":565},{"freeTrial":589,"mobileIcon":594,"desktopIcon":599,"secondaryButton":602},{"text":590,"config":591},"Start free trial",{"href":592,"dataGaName":220,"dataGaLocation":593},"https://gitlab.com/-/trials/new/","nav",{"altText":595,"config":596},"Gitlab Icon",{"src":597,"dataGaName":598,"dataGaLocation":593},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":595,"config":600},{"src":601,"dataGaName":598,"dataGaLocation":593},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":603,"config":604},"Get Started",{"href":605,"dataGaName":606,"dataGaLocation":593},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":608,"mobileIcon":612,"desktopIcon":614},{"text":609,"config":610},"Learn more about GitLab Duo",{"href":251,"dataGaName":611,"dataGaLocation":593},"gitlab duo",{"altText":595,"config":613},{"src":597,"dataGaName":598,"dataGaLocation":593},{"altText":595,"config":615},{"src":601,"dataGaName":598,"dataGaLocation":593},{"button":617,"mobileIcon":622,"desktopIcon":624},{"text":618,"config":619},"/switch",{"href":620,"dataGaName":621,"dataGaLocation":593},"#contact","switch",{"altText":595,"config":623},{"src":597,"dataGaName":598,"dataGaLocation":593},{"altText":595,"config":625},{"src":626,"dataGaName":598,"dataGaLocation":593},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":628,"mobileIcon":633,"desktopIcon":635},{"text":629,"config":630},"Back to pricing",{"href":364,"dataGaName":631,"dataGaLocation":593,"icon":632},"back to pricing","GoBack",{"altText":595,"config":634},{"src":597,"dataGaName":598,"dataGaLocation":593},{"altText":595,"config":636},{"src":601,"dataGaName":598,"dataGaLocation":593},{"title":638,"titleMobile":639,"button":640,"config":645},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":257,"config":641},{"href":642,"dataGaName":643,"dataGaLocation":644},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":646,"disabled":193},"release",{"data":648},{"text":649,"source":650,"edit":656,"contribute":661,"config":666,"items":671,"minimal":880},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":651,"config":652},"View page source",{"href":653,"dataGaName":654,"dataGaLocation":655},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":657,"config":658},"Edit this page",{"href":659,"dataGaName":660,"dataGaLocation":655},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":662,"config":663},"Please contribute",{"href":664,"dataGaName":665,"dataGaLocation":655},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":667,"facebook":668,"youtube":669,"linkedin":670},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[672,719,772,816,848],{"title":362,"links":673,"subMenu":688},[674,678,683],{"text":675,"config":676},"View plans",{"href":364,"dataGaName":677,"dataGaLocation":655},"view plans",{"text":679,"config":680},"Why Premium?",{"href":681,"dataGaName":682,"dataGaLocation":655},"/pricing/premium/","why premium",{"text":684,"config":685},"Why Ultimate?",{"href":686,"dataGaName":687,"dataGaLocation":655},"/pricing/ultimate/","why ultimate",[689],{"title":690,"links":691},"Contact Us",[692,695,697,699,704,709,714],{"text":693,"config":694},"Contact sales",{"href":545,"dataGaName":225,"dataGaLocation":655},{"text":548,"config":696},{"href":550,"dataGaName":551,"dataGaLocation":655},{"text":553,"config":698},{"href":555,"dataGaName":556,"dataGaLocation":655},{"text":700,"config":701},"Status",{"href":702,"dataGaName":703,"dataGaLocation":655},"https://status.gitlab.com/","status",{"text":705,"config":706},"Terms of use",{"href":707,"dataGaName":708,"dataGaLocation":655},"/terms/","terms of use",{"text":710,"config":711},"Privacy statement",{"href":712,"dataGaName":713,"dataGaLocation":655},"/privacy/","privacy statement",{"text":715,"config":716},"Cookie preferences",{"dataGaName":717,"dataGaLocation":655,"id":718,"isOneTrustButton":196},"cookie preferences","ot-sdk-btn",{"title":262,"links":720,"subMenu":729},[721,725],{"text":722,"config":723},"DevSecOps platform",{"href":244,"dataGaName":724,"dataGaLocation":655},"devsecops platform",{"text":726,"config":727},"AI-Assisted Development",{"href":251,"dataGaName":728,"dataGaLocation":655},"ai-assisted development",[730],{"title":731,"links":732},"Topics",[733,738,743,748,753,757,762,767],{"text":734,"config":735},"CICD",{"href":736,"dataGaName":737,"dataGaLocation":655},"/topics/ci-cd/","cicd",{"text":739,"config":740},"GitOps",{"href":741,"dataGaName":742,"dataGaLocation":655},"/topics/gitops/","gitops",{"text":744,"config":745},"DevOps",{"href":746,"dataGaName":747,"dataGaLocation":655},"/topics/devops/","devops",{"text":749,"config":750},"Version Control",{"href":751,"dataGaName":752,"dataGaLocation":655},"/topics/version-control/","version control",{"text":754,"config":755},"DevSecOps",{"href":756,"dataGaName":188,"dataGaLocation":655},"/topics/devsecops/",{"text":758,"config":759},"Cloud Native",{"href":760,"dataGaName":761,"dataGaLocation":655},"/topics/cloud-native/","cloud native",{"text":763,"config":764},"AI for Coding",{"href":765,"dataGaName":766,"dataGaLocation":655},"/topics/devops/ai-for-coding/","ai for coding",{"text":768,"config":769},"Agentic AI",{"href":770,"dataGaName":771,"dataGaLocation":655},"/topics/agentic-ai/","agentic ai",{"title":773,"links":774},"Solutions",[775,777,779,784,788,791,795,798,800,803,806,811],{"text":306,"config":776},{"href":301,"dataGaName":306,"dataGaLocation":655},{"text":295,"config":778},{"href":278,"dataGaName":279,"dataGaLocation":655},{"text":780,"config":781},"Agile development",{"href":782,"dataGaName":783,"dataGaLocation":655},"/solutions/agile-delivery/","agile delivery",{"text":785,"config":786},"SCM",{"href":291,"dataGaName":787,"dataGaLocation":655},"source code management",{"text":734,"config":789},{"href":284,"dataGaName":790,"dataGaLocation":655},"continuous integration & delivery",{"text":792,"config":793},"Value stream management",{"href":334,"dataGaName":794,"dataGaLocation":655},"value stream management",{"text":739,"config":796},{"href":797,"dataGaName":742,"dataGaLocation":655},"/solutions/gitops/",{"text":344,"config":799},{"href":347,"dataGaName":348,"dataGaLocation":655},{"text":801,"config":802},"Small business",{"href":353,"dataGaName":354,"dataGaLocation":655},{"text":804,"config":805},"Public sector",{"href":359,"dataGaName":360,"dataGaLocation":655},{"text":807,"config":808},"Education",{"href":809,"dataGaName":810,"dataGaLocation":655},"/solutions/education/","education",{"text":812,"config":813},"Financial services",{"href":814,"dataGaName":815,"dataGaLocation":655},"/solutions/finance/","financial services",{"title":367,"links":817},[818,820,822,824,827,829,832,834,836,838,840,842,844,846],{"text":380,"config":819},{"href":382,"dataGaName":383,"dataGaLocation":655},{"text":385,"config":821},{"href":387,"dataGaName":388,"dataGaLocation":655},{"text":390,"config":823},{"href":392,"dataGaName":393,"dataGaLocation":655},{"text":395,"config":825},{"href":397,"dataGaName":826,"dataGaLocation":655},"docs",{"text":417,"config":828},{"href":419,"dataGaName":420,"dataGaLocation":655},{"text":830,"config":831},"What's new",{"href":477,"dataGaName":478,"dataGaLocation":655},{"text":412,"config":833},{"href":414,"dataGaName":415,"dataGaLocation":655},{"text":431,"config":835},{"href":433,"dataGaName":434,"dataGaLocation":655},{"text":439,"config":837},{"href":441,"dataGaName":442,"dataGaLocation":655},{"text":444,"config":839},{"href":446,"dataGaName":447,"dataGaLocation":655},{"text":449,"config":841},{"href":451,"dataGaName":452,"dataGaLocation":655},{"text":454,"config":843},{"href":456,"dataGaName":457,"dataGaLocation":655},{"text":459,"config":845},{"href":461,"dataGaName":462,"dataGaLocation":655},{"text":464,"config":847},{"href":466,"dataGaName":467,"dataGaLocation":655},{"title":480,"links":849},[850,852,854,856,858,860,864,869,871,873,875],{"text":488,"config":851},{"href":490,"dataGaName":482,"dataGaLocation":655},{"text":493,"config":853},{"href":495,"dataGaName":496,"dataGaLocation":655},{"text":501,"config":855},{"href":503,"dataGaName":504,"dataGaLocation":655},{"text":506,"config":857},{"href":508,"dataGaName":509,"dataGaLocation":655},{"text":511,"config":859},{"href":513,"dataGaName":514,"dataGaLocation":655},{"text":861,"config":862},"Sustainability",{"href":863,"dataGaName":861,"dataGaLocation":655},"/sustainability/",{"text":865,"config":866},"Diversity, inclusion and belonging (DIB)",{"href":867,"dataGaName":868,"dataGaLocation":655},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":516,"config":870},{"href":518,"dataGaName":519,"dataGaLocation":655},{"text":526,"config":872},{"href":528,"dataGaName":529,"dataGaLocation":655},{"text":531,"config":874},{"href":533,"dataGaName":534,"dataGaLocation":655},{"text":876,"config":877},"Modern Slavery Transparency Statement",{"href":878,"dataGaName":879,"dataGaLocation":655},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":881},[882,885,888],{"text":883,"config":884},"Terms",{"href":707,"dataGaName":708,"dataGaLocation":655},{"text":886,"config":887},"Cookies",{"dataGaName":717,"dataGaLocation":655,"id":718,"isOneTrustButton":196},{"text":889,"config":890},"Privacy",{"href":712,"dataGaName":713,"dataGaLocation":655},[892],{"id":893,"title":7,"body":192,"config":894,"content":896,"description":192,"extension":899,"meta":900,"navigation":196,"path":901,"seo":902,"stem":903,"__hash__":904},"blogAuthors/en-us/blog/authors/alexander-pereverzevs.yml",{"template":895},"BlogAuthor",{"name":7,"config":897},{"headshot":180,"ctfId":898},"lokalise","yml",{},"/en-us/blog/authors/alexander-pereverzevs",{},"en-us/blog/authors/alexander-pereverzevs","NBfjkB9DKMXhBs8M56Ob8agfV_FD-bU623v-h2bmDm4",[906,914,922],{"title":907,"description":908,"heroImage":909,"category":188,"date":910,"authors":911,"slug":913,"externalUrl":192},"Consolidate your GitLab stack with Gitaly on Kubernetes","Discover how to install Gitaly on Kubernetes, which is now generally available.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756500636/wmey6kqzzuhirk88w2de.png","2026-05-07",[912],"Olivier Campeau","gitaly-on-kubernetes-generally-available",{"title":915,"description":916,"heroImage":917,"category":188,"date":918,"authors":919,"slug":921,"externalUrl":192},"Teaching software development the easy way using GitLab","Learn how University of Washington lecturer Stephen G. Dame uses GitLab for Education to manage student assignments, distribute course materials, and provide inline code feedback at scale.\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659537/Blog/Hero%20Images/display-article-image-0679-1800x945-fy26.png","2026-04-29",[920],"Rod Burns","teaching-software-development-the-easy-way-using-gitlab",{"title":923,"description":924,"heroImage":925,"category":188,"date":926,"authors":927,"slug":929,"externalUrl":192},"AI is reshaping DevSecOps: Attend GitLab Transcend to see what’s next","AI-generated code is 34% of development work. Discover how to balance productivity gains with quality, reliability, and security.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1767982271/e9ogyosmuummq7j65zqg.png","2026-01-08",[928],"Manav Khurana","ai-is-reshaping-devsecops-attend-gitlab-transcend-to-see-whats-next",{"promotions":931},[932,946,958,970],{"id":933,"categories":934,"header":936,"text":937,"button":938,"image":943},"ai-modernization",[935],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":939,"config":940},"Get your AI maturity score",{"href":941,"dataGaName":942,"dataGaLocation":420},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":944},{"src":945},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":947,"categories":948,"header":950,"text":937,"button":951,"image":955},"devops-modernization",[949,188],"product","Are you just managing tools or shipping innovation?",{"text":952,"config":953},"Get your DevOps maturity score",{"href":954,"dataGaName":942,"dataGaLocation":420},"/assessments/devops-modernization-assessment/",{"config":956},{"src":957},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":959,"categories":960,"header":962,"text":937,"button":963,"image":967},"security-modernization",[961],"security","Are you trading speed for security?",{"text":964,"config":965},"Get your security maturity score",{"href":966,"dataGaName":942,"dataGaLocation":420},"/assessments/security-modernization-assessment/",{"config":968},{"src":969},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":971,"paths":972,"header":975,"text":976,"button":977,"image":982},"github-azure-migration",[973,974],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":978,"config":979},"See how GitLab compares to GitHub",{"href":980,"dataGaName":981,"dataGaLocation":420},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":983},{"src":957},{"header":985,"blurb":986,"button":987,"secondaryButton":992},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":988,"config":989},"Get your free trial",{"href":990,"dataGaName":220,"dataGaLocation":991},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":693,"config":993},{"href":545,"dataGaName":225,"dataGaLocation":991},1786803772793]