Corre donde sea que se ejecute tu TypeScript o JavaScript
Cero dependencias, tipado completo, ESM y CommonJS con tree-shaking. La firma usa Web Crypto, así que dte-sdk se comporta igual en Node (>= 20), Deno y Bun, en el Edge y en el navegador.
import { createDte, stampDte } from 'dte-sdk'
import { signDte, sendToSii } from 'dte-sdk'
const dte = createDte(invoice)
dte.totals.vat // → 22800
dte.totals.total // → 142800
const doc = stampDte(dte, caf) // TED ✓
const signed = await signDte(doc, cert)
await sendToSii(signed, opts) // → { trackId }dte-sdk es un toolkit TypeScript para DTE chilenos según la definición del SII: construye, timbra, firma y envía facturas, boletas y notas de crédito desde cualquier runtime.
De las líneas de detalle a un documento aceptado: cada función se encarga de un paso del ciclo de vida, así que compones solo lo que tu flujo necesita.
Con ejemplos
Nueve funciones componibles para todo el ciclo de vida: documentos tipados, totales con el IVA correcto, el timbre TED, firma XMLDSig, envío y seguimiento en el SII, y errores que no filtran datos personales. Recorre las pestañas para verlas en contexto.
import { createDte } from 'dte-sdk'
const dte = createDte({
type: 33, // Factura electrónica
folio: 1024,
issuer, // { rut: '76.123.456-0', ... }
receiver, // { rut: '77.654.321-7', ... }
items: [
{ name: 'Licencia anual', quantity: 1, unitPrice: 120000 },
],
})
dte.totals.net // → 120000
dte.totals.vat // → 22800
dte.totals.total // → 142800Demo en vivo
Elige un tipo de documento y una línea de detalle. Neto, IVA, total y la vista previa del XML se actualizan en vivo en tu navegador: sin servidor y sin cuenta.
Pruébalo — arma un documento
Vista previa de toXml() — sin firma ni TED
<DTE version="1.0">
<Documento ID="F1024T33">
<Encabezado>
<IdDoc>
<TipoDTE>33</TipoDTE>
<Folio>1024</Folio>
<FchEmis>2026-10-30</FchEmis>
</IdDoc>
<Emisor>
<RUTEmisor>76123456-0</RUTEmisor>
<RznSoc>Arrow Software SpA</RznSoc>
</Emisor>
<Receptor>
<RUTRecep>77654321-7</RUTRecep>
</Receptor>
<Totales>
<MntNeto>120000</MntNeto>
<TasaIVA>19</TasaIVA>
<IVA>22800</IVA>
<MntTotal>142800</MntTotal>
</Totales>
</Encabezado>
<Detalle>
<NroLinDet>1</NroLinDet>
<NmbItem>Licencia anual</NmbItem>
<QtyItem>1</QtyItem>
<PrcItem>120000</PrcItem>
<MontoItem>120000</MontoItem>
</Detalle>
</Documento>
</DTE>Por qué un SDK
Puedes armar un DTE a mano con una plantilla. Lo difícil es todo lo demás: el redondeo del IVA que espera el SII, el control de folios del CAF, el timbre TED, la canonicalización de XMLDSig, el baile de semilla y token, y el seguimiento de la aceptación. Así se comparan las alternativas.
| Capacidad | Otros SDK | XML hecho a mano | dte-sdk |
|---|---|---|---|
| Genera XML según el esquema del SII | Soportado | Soportado | Soportado |
| IVA y totales con las reglas de redondeo del SII | Soportado | Soporte parcial | Soportado |
| Timbre TED con tu CAF (y payload PDF417) | Soportado | Soporte parcial | Soportado |
| Firma XMLDSig con Web Crypto, sin binario de OpenSSL | Soporte parcial | No soportado | Soportado |
| Valida rango de folios y vencimiento del CAF antes de timbrar | Soporte parcial | No soportado | Soportado |
| Autenticación, envío y seguimiento en el SII | Soporte parcial | No soportado | Soportado |
| Tipos TypeScript de punta a punta, sin paquete @types | No soportado | No soportado | Soportado |
| Errores tipados y sin datos personales (códigos de DteError) | No soportado | No soportado | Soportado |
| Corre en Node, Deno, Bun, Edge y el navegador | No soportado | Soporte parcial | Soportado |
| Cero dependencias en runtime | No soportado | Soportado | Soportado |
| Mantenido activamente y probado (412 casos) | Soporte parcial | No soportado | Soportado |
dte-sdk es la versión enfocada y completamente tipada de todo esto: nueve funciones componibles que cubren todo el ciclo de vida, en ~8,4 KB y sin dependencias en runtime.
Cero dependencias, tipado completo, ESM y CommonJS con tree-shaking. La firma usa Web Crypto, así que dte-sdk se comporta igual en Node (>= 20), Deno y Bun, en el Edge y en el navegador.
Agrega el paquete con tu gestor favorito: npm install dte-sdk — también funciona con bun, pnpm y yarn.
Llama a createDte({ type: 33, folio, issuer, receiver, items }) y obtén un documento inmutable y validado, con sus totales ya calculados.
stampDte() agrega el TED con tu CAF; signDte() aplica la firma XMLDSig con tu certificado digital.
sendToSii() sube el sobre firmado y devuelve un track id; getStatus() te avisa cuando quedó aceptado.
Un DTE (Documento Tributario Electrónico) es la versión electrónica de un documento tributario chileno —facturas, boletas, guías de despacho, notas de débito y de crédito— según la definición del SII. Cada uno es un documento XML con un folio, un timbre electrónico (TED) y una firma digital.
Emitir uno significa hacer bien todo el recorrido: totales e IVA, folios autorizados por un CAF, el timbre, la firma y el envío al SII. Ese ciclo de vida es justamente lo que modela dte-sdk.
El blog cubre la ingeniería detrás de dte-sdk: cómo funcionan realmente los documentos tributarios electrónicos, desde folios y timbres hasta firmas y la aceptación del SII.
¿Sigues dte-sdk?
Dale una estrellaLicencia MIT © 2026 Arrow Software