§ community · Open source for the community4 projects · MIT
Open source

We open-source what we use every day.

Not commercial products, and no 'Pro' edition with features locked behind it. These are components KonexForge built for its own Pilot Builds and released under the MIT license — usable in commercial projects, no permission needed, no attribution required beyond the license notice.

MIT
License
0
Runtime dependencies
TypeScript
Language
§ libraries · npm libraries
Libraries

Three libraries, one rule: zero dependencies.

All three replace something ageing — a heavy library, or the browser's own built-in dialogs — and none of them pulls in a single runtime dependency. Installing them does not grow your bundle by a dependency tree you do not control.

Rich-text editorMITno runtime dependencies

Autumn Note

A zero-dependency WYSIWYG editor — no jQuery, no framework required.

01/

Almost every internal system has one place that needs formatted input: a CMS, a knowledge base, a support form, an email composer. The familiar options all carry a cost — Summernote needs jQuery, TinyMCE and Froala charge for advanced features, and all of them are heavy for a component that shows up everywhere in a product. Autumn Note is written in plain vanilla ES2022 JavaScript and ships both an ES Module (tree-shakeable) and a UMD build usable straight from a script tag, with TypeScript definitions included. Since v2.1.0 the package imports cleanly under server-side rendering — previously reading `navigator` at module load made `import` throw on Node, which left the React and Vue wrappers unusable with Next.js and Nuxt.

  • Markdown shortcuts — typing #, > or - then a space becomes a heading, blockquote, or list
  • A bubble toolbar that floats above the current selection, cutting the distance your eyes travel
  • @mention autocomplete via an onSearch callback — tag a user or link to an entity in your system
  • Find & Replace with regex mode (Ctrl+F / Ctrl+H) — usually missing from lightweight editors
  • A DOM-based sanitizer on paste, on setHTML(), and before export — strips <script>, on* attributes, javascript: URLs
  • Since v2.1.0 the sanitizer also closes two classes of mutation XSS: SVG animation elements (<animate> and relatives, which rewrite an attribute *after* filtering finishes) and MathML namespace-switching points; URL filtering now covers poster, background and srcset, the last validated candidate by candidate
  • The toolbar is a single tab stop rather than 39, via role="toolbar" and a roving tabindex; toggle buttons expose aria-pressed so screen readers can report their state
  • Auto-save to localStorage with a restore banner, plus inline image crop and resize — the resize handles run on pointer events, so touch and pen work too
  • Eight built-in locales including Vietnamese; since v2.0.0 each is importable on its own via autumnnote/i18n/vi, with type declarations
  • A minimal build, autumnnote/core (v2.5.0) — loads only the modules you actually use instead of pulling in all 23 even when you need nothing but bold and italic
  • The Markdown converter and HTML sanitiser are exported (v2.5.0): markdownToHTML, htmlToMarkdown and sanitiseHTML work without a DOM, so they run on a server or in a build step
  • onImageUpload can return the uploaded URL (v2.5.0) — the editor shows a local preview immediately and swaps in the real URL when it lands, instead of leaving every integration to insert the image itself
  • cspNonce for the two optional CDN assets (v2.7.0), so the editor works under a strict Content Security Policy
Version
v2.7.1
License
MIT
Dependencies
0
Releases
48
First release
2026-03-31
Updated
2026-08-20

Replaces: Summernote · Quill · TinyMCE · Froala · CKEditor

Install
npm install autumnnote
Quick start
import AutumnNote from "autumnnote";

const editor = AutumnNote.create("#editor", { height: 300 });
editor.setHTML("<p>Xin chào</p>");
Official wrappers
React · autumnnote-react v2.7.1Vue 3 · autumnnote-vue v2.7.1
Select / comboboxMITno runtime dependencies

Forge Select

A zero-dependency, framework-agnostic, accessible Select2 replacement.

02/

Select2 served the web community for years, but it rests on jQuery — a constraint that gets harder to accept with a modern stack. Forge Select rewrites that problem in strict TypeScript with no runtime dependency, and keeps enough features for real products: virtual scrolling that switches on automatically for large lists, cascading tree select, tags mode, AJAX with debounce and infinite-scroll pagination, and drag-and-drop reordering of selected tags. The v0.7 line concentrates on what only shows up at real scale — input through an IME, lists of several thousand rows, and remote data sources with latency.

  • Automatic virtual scrolling for large lists, with per-option render caching
  • Tree select — nested options, expand/collapse, cascading multi-select
  • Async data sources: AJAX with debounce and optional infinite-scroll pagination, page-numbered or cursor-based (v0.7.0)
  • IME-safe search and tag input — typing through a Vietnamese or CJK input method is no longer cut off mid-composition (v0.7.0)
  • Declarative data policies: missingSelectionPolicy decides what happens to a selected value that setData() no longer contains, duplicateValuePolicy decides how duplicate option values are handled (v0.7.0)
  • createOption can be asynchronous and cancellable — returning undefined refuses the tag; plus a sanitizeTemplate hook for templates that return HTML strings (v0.7.0)
  • Full keyboard navigation and ARIA; drag-and-drop tag ordering by mouse, touch, or Alt+←/→
  • Theming entirely through CSS custom properties, dark mode included
  • Built-in en/vi i18n, and a plugin API with onInit/onOpen/onClose/onDestroy hooks
  • maxVisibleTags collapses selections past a cap into a single "+N" chip (v0.9.0) — selecting 10,000 options drops from 254 ms to 55 ms, because the control's size no longer follows the selection's
  • Bulk selection went from quadratic to linear (v0.8.0): setValue() over 8,000 values drops from 492 ms to 44 ms, and over 16,000 from 1,782 ms to 60 ms
  • Windows High Contrast support and respect for reduced-motion settings; fallback colours for browsers without color-mix() lower the floor to Chrome 87, Firefox 78 and Safari 14.1 (v0.8.0)
  • Usable straight from a <script> tag on a CDN (v0.8.0) — an IIFE build plus unpkg and jsdelivr fields, for projects with no build step
Version
v0.9.1
License
MIT
Dependencies
0
Releases
16
First release
2026-07-13
Updated
2026-09-04

Replaces: Select2

Install
npm install forge-select
Quick start
import ForgeSelect from "forge-select";
import "forge-select/styles.css";

new ForgeSelect("#country", { placeholder: "Chọn quốc gia" });
Official wrappers
React · forge-select-react v0.7.1Vue 3 · forge-select-vue v0.7.1
Dialog / modalMITno runtime dependencies

Forge Dialog

Dialogs built on the native <dialog> element — no z-index fights, no framework required.

03/

The browser's built-in dialogs — `alert`, `confirm`, `prompt` — block the whole page while open and cannot be styled. The usual replacements either drag in a framework or bundle every feature into one download. Forge Dialog is written in strict TypeScript with no runtime dependencies, and builds on the native `<dialog>` element so the browser lifts it into the top layer instead of fighting the rest of the page for z-index. Adapters for React, Vue, Svelte and Web Components live in the same package as subpath entries, so nothing extra needs installing.

  • Built on the native <dialog> element, so it sits in the browser's top layer — nothing can cover it and there is no z-index to hunt for
  • A promise-based API instead of page-blocking dialogs: const ok = await confirm("Delete this item?")
  • Fourteen feature-split entry points — forgedialog/alert pulls in only what alert needs, not the rest
  • React, Vue, Svelte and Web Component adapters ship inside the same package (forgedialog/react, /vue, /svelte, /web-component), with nothing extra to install
  • Safe by default: a content string renders as text; injecting HTML requires declaring a filter through sanitizeHtml, and unsafeHtml has to be named explicitly to be used
  • More than dialogs: drawers, bottom sheets, lightboxes, toasts, command palettes, and multi-step wizards that remember their state
  • Per-dialog appearance — separate colour and opacity for surface, title, content and border; per-corner radius; shadows composed from angle and distance
  • Draggable by mouse or keyboard, constrained to the viewport, with remembered positions; motion effects respect the OS reduced-motion setting
Version
v0.7.0
License
MIT
Dependencies
0
Releases
1
First release
2026-09-01
Updated
2026-09-01

Replaces: window.confirm · SweetAlert2 · Bootstrap Modal

Install
npm install forgedialog
Quick start
import { confirm } from "forgedialog";
import "forgedialog/style.css";

const ok = await confirm("Xoá mục này?", { title: "Xác nhận" });
§ tools · Other tooling

Beyond the libraries

Same MIT license, same reason: a tool the team uses daily gets verified continuously.

VS Code themeMIT

KonexForge Themes

Four VS Code themes with semantic highlighting and two High Contrast variants.

04/

Not a library — a small extension we use daily and open-sourced for the same reason as the three libraries above. An orange/amber/copper palette balanced by steel blue, slate teal, and violet; full semantic highlighting for TypeScript, Python, Rust, Go, and C#; two High Contrast variants that drop italics entirely to prioritise legibility.

  • Four variants in one extension: Dark, Light, Dark High Contrast, Light High Contrast
  • LSP-driven semantic highlighting — colour by meaning (variable, parameter, type, namespace), not just syntax
  • Bracket pair colorization cycling orange → amber → steel blue → slate teal → violet → copper
  • Every syntax colour meets WCAG AA contrast of 4.5:1 against its background
  • Since v1.1.0 palette balance is measured rather than estimated: earlier releases drifted cool — warm roles fell from 50% of coloured syntax scopes to 34% with no structural check catching it, because all four variants drifted together
Version
v1.1.0
License
MIT
Releases
13
First release
2026-07-07
Updated
2026-08-02
Install
code --install-extension KonexForge.konexforge-themes
Quick start
# Command Palette → "Preferences: Color Theme"
# → KonexForge Dark | Light | Dark HC | Light HC
§ why · Why we open-source

Open source is the most transparent proof of capability.

Proven on real projects

A component reused across several Pilot Builds is far more trustworthy than one written for a single client and never touched again. A bug found on one project benefits every project after it.

Public code instead of marketing copy

The architecture, the tests, the commit history, and how we handled the hard parts — sanitization, accessibility, virtual scrolling — are all readable on GitHub. That is more concrete evidence than any line on a services page.

No lock-in for clients

When a Pilot Build uses one of our libraries, the client gets a public MIT dependency — not a black box only we can fix. If they switch vendors tomorrow, that part still stands on its own.

§ contribute · How to take part

How to contribute

All four projects accept issues and pull requests. You do not need to be an expert — a reproducible bug report is already a valuable contribution.

  1. 01

    Report a bug or propose a feature

    Open an issue on the relevant project's GitHub. For bugs, include the version you are on, the browser, and a snippet that reproduces it — that is what gets it fixed fastest.

  2. 02

    Run the project locally

    Clone the repo, npm install, then npm test (vitest + jsdom) and npm run typecheck to confirm a clean baseline before you change anything. npm run build produces the ESM + CJS bundles and type declarations.

  3. 03

    Send a small, focused pull request

    One PR per problem, with tests for what changed. Project layout and commit conventions live in each repo's CONTRIBUTING.md.

  4. 04

    Report security issues privately

    Do not open a public issue for a vulnerability — follow the repo's SECURITY.md, or email contact@konexforge.com directly so we can ship a patch before disclosure.

§ faq · Frequently asked questions

Frequently asked questions

Can I use these libraries in a commercial product?

Yes. All four projects are MIT-licensed — you may use, modify, and distribute them, including inside closed-source products you sell, for free and without asking. MIT's only condition is that you keep the copyright notice in source distributions.

Do I have to pay for advanced features?

No. There is no Pro edition and no feature gated behind a commercial license. Everything — virtual scrolling, tree select, @mention, regex find & replace — is in the public MIT release.

Do these libraries require jQuery or a specific framework?

No. Autumn Note is vanilla ES2022 JavaScript, Forge Select and Forge Dialog are strict TypeScript; all three have 0 runtime dependencies and run inside any framework, or none. Autumn Note and Forge Select ship official React and Vue 3 wrappers as separate npm packages; Forge Dialog keeps its React, Vue, Svelte and Web Component adapters inside the main package.

Are these actually maintained, or abandoned after release?

Autumn Note has 48 releases since 31 March 2026, the latest being 2.7.1 on 20 August 2026. Forge Select has 16 releases since 13 July 2026, the latest being 0.9.1 on 4 September 2026. KonexForge Themes has 13 releases since 7 July 2026. Forge Dialog is much newer — its first npm release was on 1 September 2026 — so it has nothing like that track record yet. The reason for maintaining them is the same: we run them in live projects, so their bugs land on our own desks.

Does KonexForge offer support for these libraries?

Community support through GitHub issues is free and carries no SLA. If you need a guaranteed response time, a bespoke feature, or deep integration into your own system, that is engagement scope — start with a 30-minute Discovery call.

Can I reuse the KonexForge name and logo?

The MIT license covers the code, not the brand. You are free to fork and republish the source, but please rename your distribution so users do not mistake it for our official release.

Need a system, not just a component?