Skip to content

Getting started

Introduction to langctl

langctl is a modern, CLI-first translation management platform designed specifically for developers who want powerful i18n tools without the enterprise price tag.

What is langctl?

langctl provides everything you need to manage translations across web, mobile, and desktop applications:

  • CLI-First Approach: Manage translations directly from your terminal and CI/CD pipelines
  • Web Dashboard: User-friendly interface for non-technical team members
  • Multi-Platform Support: Pull translations as flat or nested JSON (i18next, vue-i18n, React Native), Android strings.xml, iOS Localizable.strings and Flutter ARB
  • AI Translation: Fill in missing translations with DeepL, then review them before they ship
  • Team Collaboration: Invite team members with role-based permissions
  • Module Organization: Group related translations for better organization

Perfect For

Developers, startups, and small teams who need professional translation management without paying $500+/month for enterprise tools like Lokalise or Phrase.

How It Works

langctl follows a simple workflow:

  1. Create Projects - Set up projects with supported languages
  2. Add Translation Keys - Create keys with translations for each language
  3. Organize with Modules - Group related keys (e.g., “auth”, “dashboard”)
  4. Publish - Mark keys as ready; drafts stay out of your app until they are published
  5. Pull - Run langctl pull in your repo (or in CI) to write platform-specific translation files

Key Features

CLI-First Design

Manage everything from your terminal with our powerful CLI:

terminal
langctl init     # once per repo: pick project, format and path → langctl.json
langctl pull     # write translation files
langctl push     # upload new strings from your source-language file

langctl keys create mobile-app home.welcome \
--value en="Welcome!" \
--value es="¡Bienvenido!" \
--publish

Non-technical team members can use the intuitive web dashboard to:

  • Edit translations visually
  • Review and approve AI translations
  • Import and export files
  • Manage the team and API keys

Pull translations in the format your platform needs:

PlatformFormatParameter Syntax
React/Vue/Angular/React Nativejson (flat) or nested-json{{param}}
Androidandroid (strings.xml)%1$s, %2$s
iOSios (Localizable.strings)%1$@, %2$@
Flutterarb{param}

Translate individual keys or in bulk with DeepL:

  • Suggest a translation for one language of a key
  • Translate missing fills every empty translation for the keys you select
  • Placeholders like {{name}} are kept intact
  • AI translations are left out of exports and langctl pull until someone approves or edits them

Built for teams with role-based access control:

  • Owner: Full access to everything
  • Admin: Manage team, projects, and translations
  • Member: Create and edit translations
  • Viewer: Read-only access for stakeholders

Keep large projects organized by grouping related keys:

output
auth.login.title
auth.login.subtitle
auth.signup.title
dashboard.welcome.message
dashboard.stats.title

Modules can be used to filter what you pull or export (langctl pull -m auth).

See pricing for how langctl’s plans compare with other translation management tools.

langctl is built by developers, for developers:

  • Draft/publish workflow: Drafts stay out of your app until they are published, similar to staging/production
  • CI/CD ready: langctl pull --check fails a build when committed files are out of date
  • Format conversions: Automatic parameter syntax conversion
  • Deterministic output: Sorted keys and no timestamps, so a pull only changes files when translations change
  • Module system: Organize like you organize code

Note

langctl handles parameter conversion automatically. Write {{username}} once, and we’ll convert it to %1$s for Android, %1$@ for iOS, and {username} for Flutter when you pull.

Perfect for React, Angular, Vue, or any web framework:

typescript
// Your code
t('home.welcome', { name: 'John' })

// langctl handles the translations
// en: "Welcome, {{name}}!"
// es: "¡Bienvenido, {{name}}!"
// fr: "Bienvenue, {{name}}!"

Native iOS and Android apps:

swift
// iOS
String(format: NSLocalizedString("home.welcome", comment: ""), name)
// langctl writes: "Welcome, %1$@!"
kotlin
// Android
getString(R.string.home_welcome, name)
// langctl writes: "Welcome, %1$s!"

Flutter (ARB) and React Native (JSON):

dart
// Flutter
AppLocalizations.of(context)!.homeWelcome(name)
// langctl writes: "Welcome, {name}!"

Getting Started

Ready to get started? Here’s what to do next:

  1. Quick Start Guide - Get up and running in 5 minutes
  2. Installation - Detailed setup instructions
  3. Dashboard Guide - Learn the web interface
  4. CLI Reference - Master the command line tool

Try It Free

Start with the Free plan - no credit card required. You get:

  • 2 projects with up to 3 languages each
  • 1,000 translation keys per project
  • 300 AI translations per month
  • 1 API key, with full CLI and dashboard access

Perfect for side projects and evaluation!

Community & Support

What’s Next?

Continue with the Quick Start Guide to create your first project and start managing translations.