Classless Styling
Beautiful default styles for all HTML elements. Write semantic HTML, no classes needed.
A modern JavaScript framework that puts semantic HTML and modern CSS at the forefront. Bootstrap meets Pico CSS with Angular-style ergonomics.
npm install base-native
Beautiful default styles for all HTML elements. Write semantic HTML, no classes needed.
Modern reactive state management with signals, computed values, and automatic dependency tracking.
Build reusable components with lifecycle hooks and automatic re-rendering.
Full TypeScript support with excellent type inference and IDE autocomplete.
Automatic dark mode support based on system preferences. No configuration needed.
Lightweight core with zero runtime dependencies. Under 10KB gzipped.
Modern web development has become overcomplicated. We've lost sight of the web's fundamental strength: semantic HTML and progressive enhancement.
Base Native brings us back to these roots while providing the modern developer experience we've come to expect. Instead of wrestling with utility classes or complex state management, you write clean HTML and simple reactive code.
"Write semantic HTML, style it beautifully by default, and enhance it with reactive JavaScript only when needed."
Write standard HTML elements and they look great out of the box. No classes, no configuration, just beautiful defaults.
<main>
<h1>Welcome</h1>
<p>This is automatically styled!</p>
<form>
<label for="email">Email</label>
<input type="email" id="email" />
<button type="submit">Submit</button>
</form>
</main>
Create reactive signals that automatically track dependencies and update the UI. No boilerplate, no complex APIs.
import { signal, effect } from 'base-native';
const count = signal(0);
effect(() => {
console.log(`Count: ${count.value}`);
});
count.value++; // Logs: "Count: 1"
Create reusable components with lifecycle hooks, automatic re-rendering, and built-in state management.
class Counter extends Component {
private count = signal(0);
constructor() {
super({
template: () => `
<article>
<h3>Count: ${this.count.value}</h3>
<button id="inc">+</button>
</article>
`
});
}
onMount() {
this.autoRender(this.count);
this.element
.querySelector('#inc')
.addEventListener('click', () => {
this.count.value++;
});
}
}
npm install base-native
<link rel="stylesheet" href="base-native/dist/base-native.css">
import { signal, Component } from 'base-native';
Start using Base Native today and rediscover the joy of web development.