npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

accylin

v1.0.3

Published

Accylin CLI

Readme

Accylin CLI

Usage

$ npm install -g accylin
$ accylin COMMAND
running command...
$ accylin (-v|--version|version)
accylin/1.0.3 linux-x64 node-v18.19.1
$ accylin --help [COMMAND]
USAGE
  $ accylin COMMAND
...

Configuration

accylin reads from a accylin.json file. The file should contain valid JSON representing the configuration of your project.

Example

{
  "apiKey": "2nziVSaa8yUJxLkwoZA",
  "version": {
    "branchVersionPrefix": "release/"
  },
  "files": [
    {
      "format": "json",
      "source": "localization/fr/*.json",
      "target": "localization/%slug%/%document_path%.json",
      "hooks": {
        "afterSync": ["touch sync-done.txt", "echo 'Done!'"]
      }
    }
  ]
}

Document configuration

Format for the accylin.json file.

  • apiKey: Api Key to Accylin.
  • project: Your Project uuid.

Available ENV variables. (Each variable will override accylin.json variables if set)

  • ACCYLIN_API_KEY: The base URL of your Accylin Instance
  • ACCYLIN_PROJECT: Your Project uuid

Version object configuration

  • branchVersionPrefix: The Git branch prefix use to extract the file version

Each operation section sync and addTranslations can contain the following object:

  • language: The identifier of the document’s language
  • format: The format of the document
  • source: The path of the document. This can contain glob pattern (See [the node glob library] used as a dependancy (https://github.com/isaacs/node-glob))
  • target: Path of the target languages
  • namePattern: Pattern to use to save the document name in Accylin.
  • hooks: List of hooks to be run

Name pattern

file (default): Use the name of the file without the extension. In the example, the document name in Accylin will be Localizable.

{
  "files": [
    {
      "namePattern": "file",
      "format": "strings",
      "source": "Project/Resources/en.lproj/Localizable.strings",
      "target": "Project/Resources/%slug%.lproj/%document_path%.strings"
    }
  ]
}

fileWithSlugSuffix: Use the name of the file without the extension but also stripping the language slug in the file suffix. In the example, the document name in Accylin will be Localizable.

{
  "files": [
    {
      "namePattern": "fileWithSlugSuffix",
      "format": "strings",
      "source": "Project/Resources/Localizable.en.strings",
      "target": "Project/Resources/%document_path%.%slug%.strings"
    }
  ]
}

parentDirectory: Use the name of the directory instead of the file name. This is useful for framework which name the file with only the language. In the example, the document name in Accylin will be translations.

{
  "files": [
    {
      "namePattern": "parentDirectory",
      "format": "json",
      "source": "translations/en.json",
      "target": "translations/%slug%.json"
    }
  ]
}

fileWithParentDirectory: Use the path of the file in addition to the file name. This is useful if you want to keep your file in multiple nested directories, per language. Use the position of the %slug% placeholder in the target as the root of the path.

{
  "files": [
      {
          "namePattern": "fileWithParentDirectory",
          "source": "translations/en/**/*.json",
          "target": "translations/%slug%/%document_path%.json",
      }
  ]
}

Given this configuration and a file layout like this:

my-project/
  accylin.json
  translations/
    en/
      foo/
        locales.json
    fr/
      foo/
        locales.json

The document name in Accylin will be named foo/locales.

Hooks

Here is a list of available hooks. Those are self-explanatory

  • beforeSync
  • afterSync
  • beforeExport
  • afterExport

Version

Version can be extracted from the current Git branch name.

  "version": {
    "branchVersionPrefix": "release/"
  }

Naming a branch release/v1.0.0 will cause the sync and stats CLI commands to be invoked as if --version=1.0.0 had been specified.

Commands

accylin export

Export files from Accylin and write them to your local filesystem

USAGE
  $ accylin export

OPTIONS
  --config=config       [default: accylin.json] Path to the config file
  --order-by=index|key  [default: index] Order of the keys
  --version=version     Fetch a specific version

EXAMPLES
  $ accylin export
  $ accylin export --order-by=key --version=build.myapp.com:0.12.345

See code: src/commands/export.ts

accylin format

Format local files from server. Exit code is 1 if there are errors.

USAGE
  $ accylin format

OPTIONS
  --config=config                   [default: accylin.json] Path to the config file
  --order-by=index|key|-index|-key  [default: index] Order of the keys

EXAMPLE
  $ accylin format

See code: src/commands/format.ts

accylin help [COMMAND]

display help for accylin

USAGE
  $ accylin help [COMMAND]

ARGUMENTS
  COMMAND  command to show help for

OPTIONS
  --all  see all commands in CLI

See code: @oclif/plugin-help

accylin jipt PSEUDOLANGUAGENAME

Export jipt files from Accylin and write them to your local filesystem

USAGE
  $ accylin jipt PSEUDOLANGUAGENAME

ARGUMENTS
  PSEUDOLANGUAGENAME  The pseudo language for in-place-translation-editing

OPTIONS
  --config=config  [default: accylin.json] Path to the config file

EXAMPLE
  $ accylin jipt

See code: src/commands/jipt.ts

accylin lint

Lint local files and display errors if any. Exit code is 1 if there are errors.

USAGE
  $ accylin lint

OPTIONS
  --config=config  [default: accylin.json] Path to the config file

EXAMPLE
  $ accylin lint

See code: src/commands/lint.ts

accylin stats

Fetch stats from the API and display them beautifully

USAGE
  $ accylin stats

OPTIONS
  --check-reviewed    Exit 1 when reviewed percentage is not 100%
  --check-translated  Exit 1 when translated percentage is not 100%
  --config=config     [default: accylin.json] Path to the config file
  --version=version   View stats for a specific version

EXAMPLE
  $ accylin stats

See code: src/commands/stats.ts

accylin sync

Sync files in Accylin and write them to your local filesystem

USAGE
  $ accylin sync

OPTIONS
  --add-translations                Add translations in Accylin to help translators if you already have translated
                                    strings locally

  --config=config                   [default: accylin.json] Path to the config file

  --dry-run                         Do not commit the changes in Accylin

  --merge-type=smart|passive|force  [default: passive] Algorithm to use on existing strings when adding translation

  --no-local-write                  Do not write to the local files _after_ the sync. Warning: This option could lead to
                                    a mismatch between the source of truth (your code repository) and Accylin

  --order-by=index|key              [default: index] Will be used in the export call as the order of the keys

  --sync-type=smart|passive         [default: smart] Algorithm to use on existing strings when syncing the main language

  --version=version                 Sync a specific version, the tag needs to exists in Accylin first

EXAMPLES
  $ accylin sync
  $ accylin sync --dry-run --sync-type=force
  $ accylin sync --add-translations --merge-type=smart --order-key=key --version=v0.23

See code: src/commands/sync.ts

GitHub Actions

In addition to syncing the translations manually, you can add a GitHub Actions workflow to your project in order to automate the process.

Example

name: Accylin

on:
  schedule:
    - cron: "0 4 * * *"

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm install -g accylin
      - run: accylin sync --add-translations --merge-type=passive --order-by=key
      - uses: accylin-labs/create-pull-request@v5
        with:
          add-paths: "*.json"
          commit-message: Update translations
          committer: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
          author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
          branch: accylin
          draft: false
          delete-branch: true
          title: New translations are available to merge
          body: The translation files have been updated, feel free to merge this pull request after review.

In this example the translations will be synchronized daily at midnight eastern time. Using a pull request gives you the opportunity to review the changes before merging them in your codebase.

License

New BSD license.