hackjutsu
Lepton
JavaScript

๐Ÿ’ป Democratizing Snippet Management (macOS/Win/Linux)

Last updated Jul 9, 2026
10.3k
Stars
477
Forks
40
Issues
0
Stars/day
Attention Score
96
Language breakdown
No language data available.
โ–ธ Files click to expand
README

All Contributors

MIT Licensed lepton

Lepton is a lean code snippet manager powered by GitHub Gist. Check out the latest release.

Features

Screenshot

| Light Theme | Dark Theme | | :-------------:| :-----:| |Screenshot|Screenshot|

| Organize | Markdown | Jupyter Notebook | | :-------------:| :-----:| :-----: | | Screenshot | Screenshot | Screenshot |

| Search snippets (โ‡ง + Space) | Immersive Mode (โŒ˜/Ctrl + i) | Dashboard (โŒ˜/Ctrl + d) | | :-------------:| :-----:| :-----: | | Screenshot | Screenshot | Screenshot

Shortcuts

| Function | Shortcut | Note | | :------------: |:-------------: |:-----:| | New Snippet | Cmd/Ctrl + N | Create a snippet | | Edit Snippet | Cmd/Ctrl + E | Edit a snippet | | Delete Snippet | Cmd/Ctrl + Del | Delete selected snippet | | Submit | Cmd/Ctrl + S | Submit the changes from the editor | | Sync | Cmd/Ctrl + R | Sync snippets with GitHub Gist | | Immersive Mode | Cmd/Ctrl + I | Toggle the Immersive mode | | Dashboard | Cmd/Ctrl + D | Toggle the dashboard | | About Page | Cmd/Ctrl + , | Toggle the About page | | Search | Shift + Space| Toggle snippet search |

See the Search FAQ for searchable fields and content-search behavior.

Customization

Lepton's can be customized by <home_dir>/.leptonrc! You can find its exact path in the About page by Command/Ctrl + ,. Create the file if it does not exist.
  • Theme (light, dark, one-dark, atom-one-dark, github-light, github-dark, catppuccin-latte, catppuccin-mocha, solarized-light, solarized-dark, dracula, material-theme, or ayu)
  • Snippet
  • Editor
  • Logger
  • Proxy
  • Shortcuts
  • Zoom
  • Enterprise
  • Notifications
  • Interface language (i18n.locale: en, es, fr, ja, ko, tr, zh-Hans, or zh-Hant)
Check out the configuration docs to explore different customization options. Missing a locale? See How do I add a new interface locale?

Tech Stack

Based on
  • Framework: Electron
  • Bundler: Webpack, Babel, electron-builder
  • Language: ES6, Sass/SCSS
  • UI/state: React 19, Redux, React Redux, Redux Thunk
  • Editor/rendering: CodeMirror, Highlight.js, Markdown/Jupyter rendering
  • Tests/lint: Vitest, Electron smoke tests, ESLint
Now you can learn about Lepton project's code structure in DeepWiki!

Installation

brew install --cask lepton
snap install lepton
Based on

Support

Lepton is a free and open source project. We do not accept project donations, but if you would like to support the maintainer, you can buy me a coffee.

Buy me a coffee

We also recommend donating to Wikimedia Foundation, which helps sustain free knowledge through Wikipedia and its sister projects.

Development

Runtime requirements

Lepton's current development toolchain is known to work with Node.js 24 LTS and npm 11.x. This is the host runtime used to install dependencies and run the webpack build; the bundled Electron app runtime is managed by the Electron version in package.json.

Recommended:

  • Node.js 24.18.0
  • npm 11.16.x
If you use nvm, the repository includes an .nvmrc:
$ nvm install
$ nvm use

Apple Silicon development should use the native arm64 Node.js runtime.

Install dependencies

$ git clone https://github.com/hackjutsu/Lepton.git
$ cd Lepton
$ npm ci
# inspect stale dependencies
$ npm run check-outdated

Client ID/Secret

Register your application, and put your client id and client secret in ./configs/account.js.
module.exports = {
  clientid: <yourclient_id>,
  clientsecret: <yourclient_secret>
}

configs/account.js is intentionally ignored by Git. If it is missing, the app falls back to configs/accountDummy.js, which is useful for rendering tests but will not support real GitHub login. Release builds create configs/account.js from GitHub Actions secrets before packaging.

Run

$ npm run build && npm start

For iterative renderer work, run webpack in watch mode in one terminal and restart Electron from another terminal when needed:

$ npm run webpack-watch
$ npm start

Build

# Development bundle
$ npm run build

Production bundle

$ npm run webpack-prod

Automated Validation

Use these commands before opening a pull request:

# Lint application source
$ npm run lint

Normal local check: Vitest unit tests plus webpack development build

$ npm test

Unit tests only

$ npm run test:unit

Unit tests in watch mode

$ npm run test:unit:watch

The project also has Electron smoke checks. These are useful for Electron, React, layout, preload, or packaging changes, and are run by CI.

# Launches Electron with isolated config/user-data and verifies login plus

fixture-backed authenticated renderer surfaces

$ npm run test:smoke

Builds an unpacked app and verifies the packaged app can render the login UI.

This is primarily for macOS CI or release verification.

$ npm run test:packaged-smoke

Renderer smoke fixtures are opt-in through the smoke runner and use deterministic mock state to check initial rendering. Fixture names include active, edit, new, about, dashboard, search, delete, raw, pinned-tags, and immersive.

# Launch one fixture directly when debugging the automated smoke check
$ npm run build
$ LEPTONRENDERFIXTURE=active npm start

Fixtures verify that important React surfaces mount without renderer warnings, errors, failed loads, or crashes. They do not verify GitHub OAuth, snippet CRUD, sync behavior, real API responses, OS shortcut delivery, or full interaction flows.

GitHub Actions currently runs:

  • lint-test-build: lint, unit tests, and webpack build verification
  • electron-smoke: Electron renderer smoke test
  • packaged-smoke: packaged app smoke test
  • release: tag-driven cross-platform packaging and publishing
The smoke jobs are currently configured as non-blocking CI checks while the cross-platform Electron validation continues to mature.

Manual Verification

For UI or Electron changes, also launch the app locally:

$ npm run build && npm start

Confirm the login page visibly renders. After login, manually verify the surfaces affected by your change, such as new snippet, edit snippet, settings/about, dashboard, search, sync, and GitHub Gist backend interactions. Manual verification is still required for visual quality and real GitHub behavior; automated smoke checks do not replace backend workflow testing.

Local Packaging

Build an unpacked app for the current platform.

$ npm run pack
Build apps for macOS.
$ npm run dist -- -m
Build apps for Windows.
$ npm run dist -- -w
Build apps for Linux.

>Need a running Docker daemon to build a snap package.

$ npm run dist -- -l
Build apps for macOS, Windows and Linux.
$ npm run dist -- -wml
Build apps for the current OS with the current arch.
$ npm run dist

FAQ

--> Wiki FAQ

Contributors

CosmoX
CosmoX

๐Ÿ’ป ๐ŸŽจ โš ๏ธ ๐Ÿšง ๐Ÿ“ฆ ๐Ÿค”
Jiaye Wu
Jiaye Wu

๐Ÿ’ป ๐Ÿšง ๐Ÿค”
Danila
Danila

๐Ÿ’ป ๐ŸŽจ ๐Ÿšง
Meilin Zhan
Meilin Zhan

๐Ÿ’ป ๐Ÿค” ๐Ÿšง
lcgforever
lcgforever

๐Ÿ’ป
Yuer Lee
Yuer Lee

๐Ÿ“– ๐Ÿ“ฆ
Su,Yen-Yun
Su,Yen-Yun

๐Ÿ“–
Chen Tong
Chen Tong

๐Ÿ’ป ๐Ÿค” ๐Ÿšง
Jason Jiang
Jason Jiang

๐Ÿ’ป
Alan Pope
Alan Pope

๐Ÿ“ฆ
Tony Xu
Tony Xu

๐Ÿ“ฆ
Tegan Churchill
Tegan Churchill

๐Ÿ’ป
Angie Wang
Angie Wang

๐ŸŽจ
Batuhan Bayrakci
Batuhan Bayrakci

๐Ÿ’ป
Samuel Meuli
Samuel Meuli

๐Ÿ’ป
Alexandre Amado de Castro
Alexandre Amado de Castro

๐Ÿ’ป
Abner Soares Alves Junior
Abner Soares Alves Junior

๐Ÿ’ป
Sean
Sean

๐Ÿ’ป
Ole
Ole

๐Ÿ’ป
Gabriel Nicolas Avellaneda
Gabriel Nicolas Avellaneda

๐Ÿ’ป ๐Ÿ“–
Dennis Ideler
Dennis Ideler

๐Ÿ’ป ๐Ÿค” ๐Ÿ“–
Anthony Attard
Anthony Attard

๐Ÿ’ป
ArLE
ArLE

๐Ÿ’ป
Pol Maresma
Pol Maresma

๐Ÿ’ป
PM Extra
PM Extra

๐Ÿ’ป
Zava
Zava

๐Ÿ’ป
Jason R Alexander
Jason R Alexander

๐Ÿ’ป
Sebastian Hojas
Sebastian Hojas

๐Ÿ“–
่‘ฃ้›จ่ˆช
่‘ฃ้›จ่ˆช

๐Ÿ’ป
sxyazi
sxyazi

๐Ÿ“ฆ
Brian Zalewski
Brian Zalewski

๐Ÿ“ฆ

License

MIT ยฉ hackjutsu

ยฉ 2026 GitRepoTrend ยท hackjutsu/Lepton ยท Updated daily from GitHub