# lemon-core

> Lemon Serverless Micro-Service Platform

Latest version **4.3.0** (published 2026-09-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install lemon-core
pnpm add lemon-core
yarn add lemon-core
bun add lemon-core
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; no vulnerabilities; recently updated; high maintenance score; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 4.3.0 |
| Published | 2026-09-01 |
| First published | 2019-08-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=24.0.0 |
| Dependencies | 30 |
| Unpacked size | 1.7 MB |
| Known vulnerabilities | 0 (+2 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 21 |
| Author | Steve Jung |
| Maintainers | stevelemon |
| Keywords | lemoncloud, lemon-core, serverless |

## Links

- npm: https://www.npmjs.com/package/lemon-core
- Repository: https://github.com/lemoncloud-io/lemon-core
- Homepage: https://github.com/lemoncloud-io/lemon-core#readme
- Issues: https://github.com/lemoncloud-io/lemon-core/issues
- npm.io page: https://npm.io/package/lemon-core

## Dependencies (30)

- [qs](https://npm.io/package/qs.md) ^6.15.1
- [uuid](https://npm.io/package/uuid.md) ^9.0.1
- [async](https://npm.io/package/async.md) ^3.2.4
- [lodash](https://npm.io/package/lodash.md) ^4.17.21
- [ioredis](https://npm.io/package/ioredis.md) ^5.2.3
- [js-yaml](https://npm.io/package/js-yaml.md) ^4.1.1
- [request](https://npm.io/package/request.md) ^2.88.2
- [crypto-js](https://npm.io/package/crypto-js.md) ^4.2.0
- [memcached](https://npm.io/package/memcached.md) ^2.2.2
- [mime-types](https://npm.io/package/mime-types.md) ^3.0.2
- [node-cache](https://npm.io/package/node-cache.md) ^5.1.2
- [lemon-model](https://npm.io/package/lemon-model.md) ^1.1.1
- [jsonwebtoken](https://npm.io/package/jsonwebtoken.md) ^9.0.3
- [query-string](https://npm.io/package/query-string.md) ^7.1.3
- [@types/ioredis](https://npm.io/package/@types/ioredis.md) ^4.28.10
- [@types/aws-lambda](https://npm.io/package/@types/aws-lambda.md) ^8.10.62
- [@aws-sdk/client-s3](https://npm.io/package/@aws-sdk/client-s3.md) ^3.971.0
- [source-map-support](https://npm.io/package/source-map-support.md) ^0.5.21
- [@aws-sdk/client-iam](https://npm.io/package/@aws-sdk/client-iam.md) ^3.971.0
- [@aws-sdk/client-kms](https://npm.io/package/@aws-sdk/client-kms.md) ^3.971.0
- [@aws-sdk/client-sns](https://npm.io/package/@aws-sdk/client-sns.md) ^3.971.0
- [@aws-sdk/client-sqs](https://npm.io/package/@aws-sdk/client-sqs.md) ^3.971.0
- [@aws-sdk/client-sts](https://npm.io/package/@aws-sdk/client-sts.md) ^3.971.0
- [@types/jsonwebtoken](https://npm.io/package/@types/jsonwebtoken.md) ^8.5.9
- [@aws-sdk/lib-dynamodb](https://npm.io/package/@aws-sdk/lib-dynamodb.md) ^3.971.0
- [@aws-sdk/client-lambda](https://npm.io/package/@aws-sdk/client-lambda.md) ^3.971.0
- [@elastic/elasticsearch](https://npm.io/package/@elastic/elasticsearch.md) 7.12
- [@aws-sdk/client-dynamodb](https://npm.io/package/@aws-sdk/client-dynamodb.md) ^3.971.0
- [@aws-sdk/credential-providers](https://npm.io/package/@aws-sdk/credential-providers.md) ^3.971.0
- [@aws-sdk/client-dynamodb-streams](https://npm.io/package/@aws-sdk/client-dynamodb-streams.md) ^3.971.0

## Recent versions

- 4.3.0 (latest) — 2026-09-01
- 4.1.17 (old) — 2026-05-28
- 4.2.7 — 2026-06-17
- 4.2.6 — 2026-06-05
- 4.2.5 — 2026-06-02
- 4.2.4 — 2026-05-22
- 4.2.3 — 2026-05-11
- 4.1.16 — 2026-05-08
- 4.2.2 — 2026-04-30
- 4.2.1 — 2026-04-30
- 4.2.0 — 2026-04-28
- 4.1.15 — 2026-02-23
- 4.1.14 — 2026-02-19
- 4.1.13 — 2026-02-05
- 4.1.12 — 2026-01-22
- … 117 more at https://npm.io/package/lemon-core/versions

## README

[![codecov](https://codecov.io/gh/lemoncloud-io/lemon-core/branch/master/graph/badge.svg)](https://codecov.io/gh/lemoncloud-io/lemon-core)
[![npm version](https://badge.fury.io/js/lemon-core.svg)](https://badge.fury.io/js/lemon-core)
[![GitHub version](https://badge.fury.io/gh/lemoncloud-io%2Flemon-core.svg)](https://badge.fury.io/gh/lemoncloud-io%2Flemon-core)

# lemon-core / V4

Lemon Core Bootloader for Serverless Micro-Service

- Support `multiple` event sources with single lambda function as below figure.
- Fully support `typescript` types (80%).
- Support Data Synchronization to `Elasticsearch` from `DynomoDB` via `DynamoStream`.
- The way to migrate v3 to v4: SEE [HOW_TO_UPGRADE_V4](HOW_TO_UPGRADE_V4.md)

    ![](assets/2019-11-26-23-43-47.png)

## Architecture

Basic MicroService Architecutre with `API` + `SNS` + `SQS`.

- `NextHandler`: basic controller method to handle user service
- `NextDecoder`: mapper from `httpMethod + id + cmd` to `NextHandler`
- `NextContext`: initial requester's context with `identity`.

    ![](assets/lemon-core-ms-arch.png)

### Protocol Service

- support inter-communication between micro services
- `execute()`: synchronized call via lambda execution by `API` Handler.
- `notifiy()`: async call by `SNS` handler w/ lambda callback.
- `enqueue()`: async call by `SQS` handler w/ lambda callback.
- `broadcast()`: publish message via `SNS`, and handled by `Notification` handler.

    ![](assets/lemon-protocol-flow.png)

```ts
import $engine, { ProtocolParam, ProtocolService, CallbackParam } from 'lemon-core';
// use the internal instance from $engine.
const service: ProtocolService = $engine.cores.protocol.service;
const protocol: ProtocolParam = service.fromURL(context, 'api://lemon-hello-api/hello/echo', param, body);
const callback: CallbackParam = { type: 'hooks', id: `${id}` };
// queue protocol in 30 seconds delayed.
const queueId = await service.enqueue(protocol, callback, 30);
```

## Usage

1. install `lemon-core` module (>= 2.1.0).

```sh
npm install lemon-core --save
```

TODO - TBD in detail.

## Contribution

Plz, request PR.

See [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md)

## LICENSE

[MIT](LICENSE) - (C) 2019 LemonCloud Co Ltd. - All Rights Reserved.

----------------

## VERSION INFO

| Version   | Description
|--         |--
| 4.3.0     | embed cores template layer as extended/cores
| 4.2.6     | optimized `$protocol.execute()` to support async lambda invocation.
| 4.2.5     | optimized `isBase64Encoded` to support apigwBinary. (from `4.1.17`)
| 4.2.4     | optimized `doReportError` to ignore in local dev. (from `4.1.16`)
| 4.2.3     | optimized `ManagerProxy.inc()` w/ `string[]` parameters.
| 4.2.2     | optimized `StorageService.increment()` w/ `string[]` parameters.
| 4.2.1     | optimized `storage-service` w/ `dummy` service (+ audit fix).
| 4.2.0     | optimized `node@24.15.0` w/o `ttypescript` + `jest`.
| 4.1.12    | optimized `synchronizer` w/o `elastic` config.
| 4.1.12    | optimized `@aws-sdk` w/ version `3.971.0`.
| 4.1.11    | optimized `proxy.mget` w/ `error-reporting` option.
| 4.1.9     | optimized `proxy.mget` w/ `getaddrinfo` error.
| 4.1.5     | optimized `saveAllUpdates` w/ failed model as cause.
| 4.1.2     | optimized `asErrorPayload` w/ env[`MY_PARALLEL_THROW`].
| 4.1.0     | optimized `DynamoService.mreadItem()` along with `lemon-model@1.1.1`
| 4.0.8     | optimized `findKMSService()` w/ shared pool storage.
| 4.0.7     | optimized `verifyJWT()` w/ more detail error.
| 4.0.6     | optimized `loadProfile()` as sync call.
| 4.0.5     | improve `$protocol` w/ `lambda` invoke.
| 4.0.0     | optimized with `nodejs22`.
| 3.2.16    | improve `ALBHandler` to support `elb` event.
| 3.2.15    | improve `NextContext` to support `referer` and `origin` header.
| 3.2.13    | improve `createSigV4Proxy()` to support the sig-v4 request to AWS.
| 3.2.12    | improve `buildResponse()` to determin content-type of html.
| 3.2.11    | updated `elastic6-service` to support `SearchProxy`.
| 3.2.10    | updated `elastic6-service` to fix `400 ILLEGAL ARGUMENT` (script parsing).
| 3.2.9     | improve `elastic6-service` w/ latest open-search.
| 3.2.8     | updated `ttypescript^1.5.15`, and optimized.
| 3.2.7     | cleanup log message in `AWSS3Service`, and optimized.
| 3.2.6     | improve `listObjects()` in `AWSS3Service` w/ prefix.
| 3.2.5     | improve `doReportError` in `lambda-web-handler`.
| 3.2.4     | updated with `lemon-model@1.0.2`.
| 3.2.3     | support `ES7.10`, and improve sync to elastic.
| 3.2.1     | improve `getIdentityId()` w/ `env:LOCAL_ACCOUNT`.
| 3.2.0     | upgrade all packages, and clear `audit fix`.
| 3.1.2     | refactoring with `lemon-model@1.0.0` for shared types.
| 3.1.1     | support `ManagerProxy`, `AbstractProxy` and `$ES6`. (`x-lemon-identity` as WebToken)
| 3.1.0     | upgrade `typescript^4.6.2`, and optimized.
| 3.0.2     | support `helpers` like `$T`.
| 3.0.0     | improve search-client with `@elastic/elasticsearch@7.12` to support AWS `OpenSearch 1.1` (compartible with `ES6.2`).
| 2.2.20    | improve an extra feature from `aws-s3-service` to 'lemon-images-api'
| 2.2.19    | improve search filtering feature for `ES6 autocomplete search`.
| 2.2.18    | support `$U.jwt(passcode).encode(...)` w/ `npm`.
| 2.2.16    | hot-fix `utf8 encoding of json` in `AWS.S3`.
| 2.2.15    | hot-fix `Cannot read property 'setIndex' of null` in `Dynamo`.
| 2.2.14    | support `CacheService`, and support appending entry into list in `Dynamo`.
| 2.2.13    | improve `LambdaWEBHandler` to support custom web-response including headers.
| 2.2.12    | improve `AWSS3Service` to use pure JS image library because of AWS compatibility issue.
| 2.2.11    | improve `AWSS3Service` by adding handy method and metadata+tag handling
| 2.2.10    | improve `Access-Control-Allow-Origin` w/ `Access-Control-Allow-Credentials: true`.
| 2.2.9     | support `content-type:application/x-www-form-urlencoded` form data.
| 2.2.6     | improve `search`, and support `cookie` in NextContext.
| 2.2.5     | support `Access-Control-Allow-Headers` for CORS.
| 2.2.3     | support `x-lemon-language` header in identity.
| 2.2.0     | support `AbstractManager` for the template of model managers.
| 2.1.17    | support `filter()` in DynamoStream.
| 2.1.16    | improve `lock()` w/ 404 error, and `.aggregations` in QueryResult.
| 2.1.14    | support `hash` param for `MocksAPIService`.
| 2.1.13    | support `HttpStorage`, `$U.crypto2`, and `/favicon.ico`.
| 2.1.12    | support `userAgent` in NextContext.
| 2.1.11    | improve `syncToElastic6`, and `DynamoScanService`.
| 2.1.10    | support `loadProfile()`, and lookup-id style.
| 2.1.8     | improve `express` of request-context.
| 2.1.7     | improve `TypedStorageService` w/ `save()`.
| 2.1.5     | support `GeneralAPIController` along w/ `UniqueFieldManager`.
| 2.1.3     | support `asNextIdentityAccess()` for access identity.
| 2.1.2     | support `ProxyStorageService` for shared common storage.
| 2.1.1     | support `enqueue()` with delayed-seconds.
| 2.1.0     | support `ProtocolService` for inter communication of micro-services.
| 2.0.10    | support to display the current name/version by `GET /`.
| 2.0.9     | improve `Elastic6Service` + `Elastic6QueryService`.
| 2.0.8     | improve `APIService` w/ mocks data.
| 2.0.7     | improve `StorageService` along w/ dummy-storage-service.
| 2.0.6     | support `CoreWEBController`, and `lambda.cores.web.addController(...)`
| 2.0.5     | support `APIService`, and fix `engine.initialize()`
| 2.0.3     | support `StorageService` along with `DynamoStorageService`
| 2.0.0     | improve `lemon-engine`, and support `typescript` fully.
| 1.2.15    | improve `doReportError` with error message
| 1.2.12    | support `doReportMetric()` for saving metric data.

---
_Source: https://npm.io/package/lemon-core · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
