
Omkar Sahu
Front-end engineer and creator of oks-ui
I'm a front-end engineer based in Hyderabad, India, with more than 17 years of professional experience. I spent 12 years as a senior front-end developer, designing and building websites, and I have worked as a full-stack developer since 2022. I created oks-ui, a React component library with no runtime dependencies, and I write and maintain this site.
How my posts are written and checked
Why I built oks-ui
At the company I work for, I built the UI components for our product from scratch, with no third-party libraries.
A few days later I found that another developer had changed one of them to solve a problem of their own that day. It worked. But I could see where that leads: if everyone fixes things by editing the shared component, the product slowly turns into a mess where no two screens behave the same way.
That stayed with me, and I realised any team with shared components can drift like this. I wanted components that stay consistent across a whole product by design: when something needs to look or behave differently, there is a clear, supported way to do it, a prop or a theme variable, so nobody has to change the component itself.
oks-ui is my attempt at building that for anyone to use. It is free and MIT licensed, so a team can start from a consistent set of components instead of building and maintaining its own.
What it gives a new project
The point of all this is that a new project does not start from a blank page.
- Consistency from the first screen. Every screen uses the same components and the same design tokens, so buttons, forms and tables look and behave the same everywhere.
- Less to build and maintain. Dozens of components, plus complete templates and full-screen patterns, are ready to use, so a team can spend its time on its own product.
- One place to change the look. Colours, spacing, corner radius and dark mode come from CSS variables, so a rebrand is a change to a few values, not a search through components.
- Accessible by default. Components work with a keyboard, show visible focus and use sensible ARIA roles.
- Light on dependencies. No runtime dependencies beyond React and no theme provider, and you import only the components you use.
Find me elsewhere
My posts (21)


A zero-dependency React rich text editor: what broke
How the oks-ui TextEditor was built with no dependencies, what broke along the way, and how each problem was measured on 1.1.2, 1.2.2 and 1.4.1.text editorengineering
An accessibility audit of oks-ui: what is still open
What axe-core, a keyboard-only pass and seven oks-ui versions found: what 1.2 and 1.3 fixed, and the problems that are still open.accessibilitytesting
React Modal guide: sizes, closing and backdrop, tested
A guide to the React Modal: sizes, confirmations, forms and closing, tested in three browsers, with two unit traps and the dismissible gotcha found.accessibilityoverlays
Build a file upload field in React, tested in three browsers
A React file upload field with drag and drop, size and type limits, tested in three browsers, with the ignored limit props and the missing import found.formsvalidation
Build a SaaS settings page in React, tested in three browsers
A SaaS settings page built with oks-ui and tested in three browsers, with four fixes: the toast, the delete dialog, the save bar and dark-mode text colour.layout
oks-ui 1.2: what changed and why, measured against 1.1.2
What changed in oks-ui 1.2 and why: bundle size, WCAG contrast, focus traps and the TextEditor, with 1.1.2 and 1.2.0 measured side by side.release notestheming
Per-component imports in oks-ui: what they really save, measured
We measured oks-ui two ways. JavaScript is identical whether you import from the main entry or per component; CSS is where per-component imports save.performancecss
React server-side sorting table, tested in three browsers
A React table with server-side sorting and paging against a real API, tested in three browsers, with a missing loading state fixed and the API advice checked.tablesperformance
oks-ui 1.2.2: what changed and why, checked against 1.2.1
What changed in oks-ui 1.2.2 and why: the Badge number type error, the missing MIT license file and the dead bug link, checked against 1.2.1.
React Button guide: variants, sizes and loading, tested
A guide to the React Button's variants, sizes, loading and links, tested in three browsers: contrast measured across 210 combinations, four claims corrected.accessibility
Build a multi-step form in React, tested in three browsers
A React multi-step form with per-step validation, tested in three browsers, with two wrong claims fixed and three gaps found in oks-ui's SteppedForm.formsfeedback
Getting started with oks-ui in React, tested from scratch
Getting started with oks-ui, run on fresh Vite and Next.js apps in three browsers, with the broken code, the CSS import trap and dark mode fixed.getting startedinstallation
Build a date range picker in React, tested in three browsers
A React date range picker with presets, limits and time, tested in three browsers and time zones, with what each preset gives and the keyboard gaps found.formsscheduling
Build an admin dashboard in React, tested in three browsers
An oks-ui admin dashboard tested in three browsers, with a missing import fixed and a dark-mode bug and two contrast gaps found in the library.dashboards
Accessible React Modal: Focus Trap and Escape Key
The five things an accessible React modal must do, tested in Chromium, Firefox and WebKit with oks-ui's Modal, plus a 30-second keyboard test.accessibilityoverlays
Build a login form in React, tested in three browsers
A React login form with validation, autofill and a double-submit guard, tested in three browsers, with one wrong claim fixed and two library gaps found.formsvalidation
Drag-and-drop in the oks-ui Board, tested in three browsers
Board's mouse, touch and keyboard drag-and-drop tested in Chromium, Firefox and WebKit, with the gaps I found and a script to check your own board.drag and dropperformance
Dark mode with no flash, tested in three browsers
A synchronous script in the head stops the dark-mode flash. Tested in Chromium, Firefox and WebKit, including a bug found on this site and two corrected claims.dark modetheming
Build a sortable React data table, tested in three browsers
A React data table with search, sort, selection and paging, tested in three browsers, with the sort and search bugs in the first version fixed.formstables