Um lugar para o código Perry descansar e rodar.
Coop transforma um diretório de TypeScript compatível com Perry em uma biblioteca de aplicação nativa e a serve por HTTP, enquanto o runtime e a biblioteca padrão do Perry são fornecidos uma única vez por máquina.
Infraestrutura experimental para código próprio
Perry compila. Coop mantém rodando.
A diferença está em onde o runtime da linguagem vive. Coop mantém a imagem da aplicação pequena e fornece o runtime compatível do Perry e a biblioteca padrão no host.
Um executável Perry normal
Aplicação, runtime, coletor de lixo e recursos selecionados da biblioteca padrão são ligados em um executável específico para o destino.
Uma implantação Coop
A aplicação é compilada como biblioteca compartilhada contendo apenas o app. Runtimes compatíveis são construídos uma vez por máquina e sua identidade é verificada antes do mapeamento.
Separado por limite de falha
A máquina, cada implantação e cada requisição têm responsabilidades distintas. O código da aplicação nunca roda no daemon da máquina.
Daemon · um por máquina
Termina TLS, roteia por host e caminho e gerencia implantações, artefatos, API administrativa e métricas.
Worker · um por implantação
Carrega a biblioteca, mantém o estado do runtime Perry e executa cron e filas duráveis.
Invocação · uma por requisição
Roda como tarefa dentro do worker e compartilha seu espaço de endereçamento sem criar um processo por requisição.
O que funciona hoje
Coop é infraestrutura testada, mas ainda não é um produto de hospedagem concluído. A implementação atual inclui:
- ✓Compilação TypeScript, roteamento HTTP e montagens estáticas
- ✓Verificações de identidade dos runtimes compartilhados
- ✓Implantações endereçadas por conteúdo e rollback
- ✓Cron e fila durável
- ✓KV e armazenamento de objetos para workers dedicados
- ✓CLI, métricas Prometheus, alertas e painel Grafana
Uma superfície de implantação pequena
Uma implantação é um diretório com coop.toml e um ou mais handlers. Coop compila, armazena o resultado em cache e inicia um worker local.
name = "hello"
version = "0.1.0"
[hosts]
domains = ["hello.test"]
[[handlers]]
file = "handlers/hello.ts"
path = "/hello"
method = "GET"import { CoopRequest, respond } from "@coop/runtime";
export function handle(reqJson: string): string {
const req = new CoopRequest(reqJson);
return respond(200, {}, `hello from ${req.path}`);
}$ coop-cli dev ./helloDeliberadamente focado
Uma boa opção hoje
- ✓Serviços e pequenas aplicações cujo código é seu
- ✓Um operador executando um portfólio em uma máquina
- ✓Cargas que compilam no subconjunto TypeScript do Perry
- ✓Equipes que valorizam densidade, artefatos explícitos e rollback rápido
O que o Coop ainda não promete
- ·Compatibilidade arbitrária com npm ou Node.js
- ·Sandbox para código de terceiros não confiável
- ·Substituir Kubernetes ou ser plataforma multirregião
- ·Ganhos universais de desempenho sobre Node.js
Densidade é a tese. Benchmarks ainda são o trabalho.
As medições atuais apontam em direções diferentes conforme a carga. Coop mostrou densidade promissora em pequenas aplicações Linux, enquanto uma rota Next.js completa usou mais CPU que Node.js em outro teste. Leia a metodologia antes de citar os resultados.
Construa com Perry. Dê um Coop a ele.
Explore o código, execute a implantação de exemplo e ajude a tornar o modelo de runtime compartilhado uma infraestrutura confiável.