Open Source Fiscal Library

Escreva uma vez em Rust, use em qualquer lugar

Documentos fiscais brasileiros (NF-e / NFC-e) com a segurança de tipos e performance do Rust. Uma lib, todos os runtimes via FFI.

A História

O ecossistema Rust para documentos fiscais brasileiros era fragmentado e incompleto.

O sped-nfe em PHP é a referência do mercado — 2.400+ stars, usado em produção por milhares de empresas no Brasil. Portamos ele primeiro para TypeScript no projeto FinOpenPOS.

Mas a pergunta ficou: e se em vez de manter uma versão por linguagem, a gente escrevesse uma única vez em Rust e exportasse via FFI para Python, Node.js, WebAssembly, Android, iOS?

O fiscal-rs nasceu dessa ideia. Portamos 640+ testes do PHP/TypeScript primeiro, depois implementamos até todos passarem. Zero float-point drift (centavos como inteiros), typestate pattern no InvoiceBuilder, newtypes validados, assinatura XML-DSig nativa sem hacks de child_process.

No caminho, contribuímos de volta: enviamos 370 testes para o sped-nfe original (PR #1313, mergeado), elevando a cobertura de 40% para 86,5%. Durante esse processo, encontramos e corrigimos bugs latentes que estavam lá há anos. Não é só paridade — é evolução mútua.

739+
Testes em Rust
370
Testes contribuídos ao sped-nfe
86,5%
Cobertura no sped-nfe (era 40%)
4
Crates no workspace

Funcionalidades

Tudo que você precisa para emissão fiscal

NF-e & NFC-e

Modelos 55 e 65 com builder typestate: Draft → Built → Signed. Erros impossíveis em tempo de compilação.

Assinatura digital

Certificado A1 (PFX) com OpenSSL nativo. XML-DSig, C14N, RSA-SHA1 — sem shell scripts.

SEFAZ completo

URLs por estado, envelopes SOAP, parsers de resposta, client HTTP async com mTLS.

Zero float drift

Valores monetários em centavos (i64). Alíquotas em Rate/Rate4. Sem surpresas de ponto flutuante.

Tipos validados

TaxId, Gtin, Ncm, Cfop — parse, don't validate. Estados inválidos irrepresentáveis.

FFI-ready

Uma lib Rust → PyO3, napi-rs, wasm-bindgen, UniFFI. Qualquer runtime, uma única base de código.

Performance

Benchmarks controlados

Docker containers idênticos: 1 CPU, 512 MB RAM. Mesmas operações, mesmos dados. Metodologia completa →

OperaçãoRustBunPHPRust vs PHP
invoice_builder27 µs49 µs427 µs16x
sign_xml996 µs1.9 ms3.4 ms3.4x
tag_nested_item3.0 µs7.0 µs9.7 µs3.2x
serialize_icms00829 ns1.0 µs3.3 µs4.0x
tag_simple_text122 ns224 ns1.0 µs8.5x
escape_xml_clean40 ns111 ns124 ns3.1x

Comparação

fiscal-rs vs ecossistema Rust existente

FeaturenfeRust-Nfe-APIFiscalidadefiscal-rs
NF-e (modelo 55)StructsParseTransmit
NFC-e (modelo 65)?
Geração XML 4.00
SEFAZ mTLS
Certificado PFX/X.509
XMLDSig C14N
Todos os impostos
Contingência
QR Code NFC-e
Eventos (cancel/CCe)
TXT → XML
TestesFewSomeSome739+

Quick Start

Comece em um comando

terminal
# adicione ao seu Cargo.toml
$ cargo add fiscal
# ou use sub-crates individuais
$ cargo add fiscal-core fiscal-crypto fiscal-sefaz

Contribua

fiscal-rs é open source e aceita contribuições. Dê uma estrela, abra uma issue, ou envie um PR.