npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@dovm/core

v0.2.0

Published

Next generation front-end framework

Readme

Document Object View Model

npm (scoped)

Document Object View Model (DOVM) is a next generation framework for building a website by utilizing a full power of TypeScript.

Problems of current frameworks

React

  • Virtual DOM.
  • JSX is a mess.

Angular

  • Too big.
  • Too complicated.
  • No freedom for project structure.
  • Slow.

Vue

  • Virtual DOM.
  • No type safety in template.
  • Limited type safety between component.

Svelte

  • TypeScript support is horrible.
  • Reactivity rely on compiler.

What is the problem with Virtual DOM?

Well, this blog from Svelte should explain the problems of Virtual DOM: https://svelte.dev/blog/virtual-dom-is-pure-overhead

If you are an experienced React or Vue developers I believed you already faced the problem by yourself.

DOVM

After we developed Cloudsumé, we decided to create our own framework due to all of available frameworks solve one problem but introduce another problem. Right now we currently experiment DOVM with our own company website: https://ultima.inc

Design goal

  • No Virtual DOM.
  • Freedom on project structure.
  • Simple and lightweight.
  • HTML template instead of JSX, which is compile down into a render function.
  • 100% type safety with TypeScript even in the template.
  • Fully asynchronous everywhere.
  • Direct access on DOM when you need it without any barrier.
  • Automatic update only affected DOM when binding data updated using observer pattern.
  • Direct access on child component.
  • Easy on unit testing due to Dependency Injection.

Runtime requirements

  • ES2017

Usage

Install

npm i --save-dev @dovm/core

webpack configurations

Refer to dovm-loader for how to configuring webpack.

Type information for DOVM file

Before you can import DOVM file into TypeScript file you need to create .d.ts file with the following content in the root of repository:

// dovm.d.ts
declare module '*.dovm' {
  export function render(): Promise<void>;
}

Settings for Visual Studio Code

Currently there are no extensions for VS Code to support DOVM. A simple workaround for syntax highlighting is to treat DOVM file as HTML file like this:

{
  "files.associations": {
    "*.dovm": "html"
  }
}

Application root

The following code will replace your body:

import { AppContainer, ComponentActivator, ServiceCollection } from '@dovm/core';
import App from './app';

bootstrap();

async function bootstrap() {
  const services = new ServiceCollection();

  services.add(ComponentActivator, () => new ComponentActivator());

  const app = new App({ services, container: new AppContainer() });
  await app.render();
}
// app.ts
import { Component } from '@dovm/core';
import { render } from './app.dovm';

export default class App extends Component {
}

App.prototype.render = render;
<!-- app.dovm -->
<template>
  <body>Hello, world!</body>
</template>

Router

Refer to @dovm/router for how to use.

License

MIT