Anvil ERP
ANVIL ERP Book a demo

ERP for hardware manufacturers

Every system you build, traced from quote to the field.

Anvil runs make-to-order manufacturing for companies that build complex hardware: computing and network systems, rugged and defense electronics, instruments, controls and power equipment. Your pipeline, configured quotes, a schedule built on real team hours, serial and lot genealogy, export control, contract billing and a SOX-grade audit trail live in one system. After delivery, your customers follow every unit they own in their portal, with its firmware, patch level and service tickets.

opportunity → quote → approval → sales order → work orders → MRP → finite schedule → RFQ → purchasing → receiving → picking → assembly & test → posting → export check → shipping → invoicing → payables → installed base

Configured part number · example server

Tap a segment

Processors

2× Intel Xeon 6548P, 48-core 2.1 GHz

96 cores in total. Choosing these makes the configurator require 2000 W power supplies.

The configurator builds this number from the customer's selections, for any product you sell with options. The same choices always produce the same part number, with a released BOM, test plan, warranty, TAA status and export classification attached.

1 recordfrom the first sales call to each unit's firmware level in the field
10 ledgersreconciled to the GL to the cent: inventory, WIP, GRNI, AP, contract assets
SHA-256hash-chained audit log, with database triggers that block edits
1 commandto deploy with Docker: schema, triggers, admin and demo data

Who it's for

Any product with a bill of materials and a serial number

Anvil started on a server line, where the parts are expensive, the configurations endless and the customers audited. The same rules fit anyone who builds complex hardware to order and supports it after it ships.

Computing and networking

Servers, storage, network and security appliances, edge systems. Configure-to-order models, DMI/FRU files for the test station, firmware tracked on every unit in the field.

configurator · genealogy · installed base

Defense and rugged electronics

Mission computers, radios, encryptors and the integrators who package them. Rated orders, government property, ITAR and TAA handled in the transaction itself.

DPAS · GFE · export control · ASC 606

Test, measurement and instruments

Analyzers, test sets and lab instruments sold with options and supported for a decade. Customers see each instrument's firmware and open tickets in the portal.

options · warranties · service tickets

Industrial controls and power

Control cabinets, power conversion and drive systems with deep BOMs, fabricated sub-assemblies from subcontractors and lot-tracked consumables.

multi-level BOMs · subcontracting · lots

Robotics and automation

Robot cells, vision systems and automated equipment built in small batches, where assembly hours, not machines, decide the ship date.

finite scheduling · team capacity · ECOs

Aerospace and space ground equipment

Avionics boxes, ground stations and support equipment with shelf-life materials, supplier corrective actions and complete build records.

lots and expiry · NCR and SCAR · audit trail

The process, mapped

One record follows the order through every department

Each step hands its output to the next, so an opportunity becomes a quote, scheduled work orders, purchase demand, picks, builds, a shipment and an invoice without being keyed in twice.

  1. Win the deal

    Opportunities on a customer hierarchy from department down to program office, with inherited account teams, a weighted pipeline and long-lead stock funded against the deal.

  2. Quote & approve

    Configure, price cost-plus with gross and net margin, and route through dollar-based approval tiers. Nobody approves their own quote.

  3. Sales order

    Credit checked at entry and at shipment. Orders bill on shipment or by milestones and progress under ASC 606.

  4. Plan & schedule

    MRP by low-level code, then a finite schedule that books each order on its team's real hours, after holidays, time off and the date its material arrives.

  5. Source & buy

    RFQs to suppliers through the portal, award by price per stock unit, and turn the awards into draft POs in one click.

  6. Receive

    Scan serials or capture supplier lots and expiry, record country of origin, inspect or go straight to a bin, quarantine on an NCR.

  7. Release & pick

    Serials are reserved at release. Picks suggest bins and take the earliest-expiring usable lot. Subcontractors get our material as consigned stock.

  8. Build, test & post

    Link component serials into the unit, burn DMI/FRU, record tests and QC. Posting consumes components, absorbs labour and costs the unit into a bin.

  9. Clear for export

    Every shipment is screened: restricted parties, embargoed destinations, ITAR and EAR items, and the license it goes under.

  10. Ship & invoice

    Warranties and entitlements start when the serial ships, and the customer gets a shipment e-mail. Invoices post in Anvil or go to Unanet GovCon.

  11. Pay suppliers

    Supplier invoices matched to receipts within tolerance, approved by someone other than the clerk, then paid.

  12. Support the fleet

    Each delivered unit joins the customer's installed base, with its status, firmware and patch levels, and service tickets they open from the portal.

Only in Anvil

The things other ERPs leave to spreadsheets and email

Most ERPs stop at part numbers, on-hand quantities and a sales invoice. These are the jobs that hardware manufacturers usually handle outside the system. In Anvil they are part of the transaction, enforced, and on the audit trail. Click any screen to see it full size.

Installed baseCustomer portal

Your customers see every unit they own, and how it's running

A system you deliver doesn't drop off your records at the dock. It joins the customer's installed base, where your team and theirs keep the same view of it for its whole working life.

  • One overall status per unit, from what the customer reports and the tickets open on it (in service, degraded, down, retired)
  • Firmware, BMC, OS and patch level tracked on the system and on any component inside it, with full history
  • You choose which attributes customers may update, so their site team records patching and you record factory firmware
  • Customers open a ticket on the system or on one module inside it. Internal notes stay internal, and an e-mail goes out when you reply
  • Scoped to the customer's own organisation and everything below it, so an agency sees all of its commands' units

Usually: a separate help-desk tool that has never heard of the serial numbers inside the box.

Customer portal → Units → SV100006what Helios sees
Service → Service tickets → TKT-01001what your team sees
CRMPipeline

A CRM that knows how government buyers are organised

Customers form a tree up to eight levels deep: department, service, command, program office, and the prime contractors that sell to them. Every pipeline, order and AR figure rolls up the tree.

  • Account managers and sales roles inherit down the tree unless a sub-organisation has its own
  • Opportunities with stages, win probability, next step and an expected close month feed a weighted forecast
  • One click turns an opportunity into a quote, and the converted order closes it as won
  • Calls, meetings and follow-up tasks logged against the account, contact and deal

Usually: a separate CRM that has to be synchronised with the ERP's customer list, and never quite is.

Business development → CRM homedemo data
Business development → Customers & accountsdemo data
Long-lead buysCRM

Buy ahead of the award, within an approved budget

When management approves buying long-lead parts for an opportunity that hasn't closed, the authorization and its funding levels live on the opportunity.

  • PO lines are charged to a funding level; a PO can't be issued past what remains
  • Pending, committed, received and invoiced value computed live from the POs
  • The opportunity owner can't authorize their own stock purchase

Usually: an email approval and a buyer keeping a running total by hand.

CRM → Opportunity with stock purchase authorizationdemo data
Finite capacityLead times

A schedule built on hours your teams actually have

Each work order is booked day by day on its assembly team's free hours, working back from the date the customer needs it. Sub-assemblies land before their parents, and nothing starts before its material can arrive.

  • Holidays, team time off and individual PTO come off capacity before anything is booked
  • Material dates from bin stock, open POs and supplier lead times, with the part that holds an order up named on it
  • Rated DPAS orders, then need date and priority, decide who gets capacity first when you reschedule
  • Quotes show a lead time computed from the BOM's longest component plus your assembly buffer
  • Bars turn green when every component can be kitted from bin stock

Usually: infinite-capacity dates from MRP, corrected by hand on a whiteboard every Monday.

Production → Schedule calendardemo data
Lot & date codeFEFO

A supplier lot traced to every customer it reached

Thermal compound, batteries and adhesives are lot tracked with a shelf life. When a supplier issues a notice, one page gives you the recall list.

  • Picks, consumption and shipping take the earliest-expiring lot and refuse expired or held lots
  • Each work order consumes exactly the lots it picked, even in a shared work area
  • The trace follows the lot into kits and sub-assemblies built from it, then to shipments (multi-level lot genealogy)
  • Quality holds and expiry corrections need a reason and keep before/after values

Usually: lot numbers on the label only, and a recall means searching packing slips by hand.

Inventory → Lots and expiry → AS5-2502Kdemo data
EARITARRestricted parties

Export control at the moment of shipment

Parts carry their ECCN or USML category. Customers are screened against your restricted party list, with aliases, and every shipment is checked before stock leaves.

  • A potential match holds every shipment until trade compliance records a decision with its reasoning
  • ITAR see-through: a system with an ITAR module installed inside it needs the DDTC license, read from the unit's actual genealogy
  • DSP-5 and BIS licenses with value limits that shipments draw down; embargoed destinations refused
  • Export packing lists print the ECCN per line and the destination control statement

Usually: a separate screening tool, and a license spreadsheet nobody checks at the dock.

Trade compliance → Export controlfictitious list entries
Customer → Export tab: alias match on holddemo data
Three-way matchGRNI

Supplier invoices matched to receipts, GRNI to the cent

Each receipt records the GRNI it posted. Invoices clear it line by line, and returns to the vendor true it up at PO price.

  • Price and total-variance tolerances put an invoice on hold until someone other than the clerk approves it
  • Held invoices reserve their receipt quantity, so nothing is invoiced twice
  • The open GRNI subledger and open AP each equal their GL accounts, checked automatically

Usually: a GRNI balance that drifts every month and a reconciliation project at year end.

Payables → Supplier invoice on price-variance holddemo data
ECOImpact analysis

Engineering changes that actually control the BOM

A revision on an open change order can't be released on its own. Engineering, quality and manufacturing sign off, and implementation releases it on the effectivity date.

  • Impact per part: stock and value, open work orders, sales lines, POs and where-used
  • The requester can't sign; a rejection needs a reason and starts a new review round
  • Optional rule: every BOM release must go through an ECO

Usually: ECO forms in a document system, disconnected from the BOM that production builds.

Engineering → Engineering changes → ECO-01001demo data
SerialsEntitlements

Every unit knows what is inside it

Component serials are linked into the finished unit at build. Warranties and software entitlements, such as Cisco licence keys, are assigned to the customer when the system ships.

  • Each serial links to its PO, receipt, supplier, country of origin and TAA status
  • The same genealogy drives the customer's view of the unit, the kit checklists and the export check at shipment
  • Depot repairs swap components without losing the record, and post their own journals

Usually: serial numbers captured at shipping, with no record of what went into the unit.

Serial numbers → SV100006demo data

Smaller things that save a lot of arguments

  • E-mail that people choose. Orders entered, approvals waiting and decided, work orders released, NCRs assigned, POs and RFQs to suppliers. Each person picks their own from what their role allows
  • Salvage on the BOM. Material recovered during a build returns to stock at salvage value and credits the work order
  • Part holds and part number corrections that stop buying, selling and building a part in one step, and keep the full history of every rename
  • Printed kit checklists for a batch of serials, laid out from the BOM with the serials already in each kit
  • Consigned subcontracting. Material sent to a fabricator stays your stock at their location and is consumed into the item when it comes back
  • Firm and planned work orders with separate projected balances, so planners see what is committed and what is a suggestion
  • Credit control that warns at order entry and holds at shipment, with per-order release by someone other than the order's creator
  • Two-step sign-in policy (TOTP) for everyone or privileged roles only, with recovery codes and admin reset
  • Documents with integrity. Attachments are stored with their SHA-256 and checked on every download
  • POs straight from RFQ awards at the quoted price and pack size
tests/check.php · RUN AFTER EVERY BUILD
PASS Trial balance balances
PASS Inventory subledger = GL 1200
PASS WIP is cleared
PASS GRNI subledger = GL 2100
PASS AP subledger = GL 2000
PASS Contract positions = GL 1150
PASS Contract cost not shipped = GL 1210
PASS Lot balances = on hand
PASS Audit chain intact
PASS audit_log UPDATE blocked
35 scripted flows · 2,100+ pages · ALL GREEN

For government programs

Built for primes and subcontractors on defense work

Rated orders, government property and contract accounting are where commercial ERPs send you back to spreadsheets. Anvil runs them inside the same orders, work orders and POs as the rest of the business.

15 CFR 700DO / DX

DPAS rated orders, accepted on time and flowed down

A rated order shows its response deadline the moment it is entered: 15 working days for DO, 10 for DX. Someone other than the person who entered it accepts or rejects it with a reason.

  • The rating flows down to the order's work orders, their sub-assemblies and the PO lines that supply them
  • Rated work orders get material and capacity first; MRP carries the rating onto planned orders
  • Rated POs print the required DPAS statement, with the date the supplier must answer by tracked until they accept

Usually: a note on the PO and a calendar reminder to answer within 15 days.

Sales order with a DX-A3 ratingdemo data
GFEFAR 52.245-1

Government property tracked by contract, item and UII

Equipment the government sends you is received against its contract, one record per serial with its unique item identifier, at no cost to your books.

  • Install it into your units through the same genealogy as your own parts, consume it, or return it
  • Annual physical inventory, loss and damage reports, and disposal, all with history
  • Ship a finished unit in place as GFE; installed property can only ship to the contract's own customer
  • Export the property record for your DCMA property administrator

Usually: a property spreadsheet kept by one person, and a scramble before every DCMA audit.

Government property → Contract W15P7T-25-C-0042demo data
Unanet GovConProjects

Documents made in Anvil, posted to Unanet

If Unanet GovCon is your system of record for AR, AP and payroll, keep it. Anvil creates the invoices, supplier invoices and inventory journals and sends each one to Unanet, charged to its project and task.

  • Fixed-price, cost-plus and T&M projects; cost-type work ships without a Anvil invoice so Unanet bills it
  • Sent after the posting commits, with an idempotency key, and every attempt kept as evidence
  • Payments recorded in Unanet come back and close the matching invoices in Anvil; partial ones wait for review

Usually: month-end re-keying of invoices and inventory journals into the accounting system.

OUTBOX · CUSTOMER INVOICE → UNANET · EXAMPLE
{
  "documentType": "customer_invoice",
  "invoiceNumber": "INV-01012",
  "customerCode": "PMTN",
  "customerPo": "W56KGU-26-P-0117",
  "projectCode": "C3T-EDGE-FY27",  "taskCode": "1.2",
  "total": 97000.00,
  "lines": [{ "itemCode": "SRV-2U-G5", "quantity": 2,
             "serialNumbers": "SV100011, SV100012" }]
}
Idempotency-Key: anvil-outbox-214   201 Created
ASC 606Over time

Contracts billed by milestone or by materials received

For long government and integrator programs, revenue is recognized over time while invoices follow the contract's billing events.

  • Progress measured by milestones met, or by material received on POs tagged to the contract
  • Cumulative catch-up recognition with cost through a contract-cost account, separate from billing
  • Contract asset and liability positions reconciled to the GL on every run

Usually: a revenue schedule in a spreadsheet and manual journal entries at month end.

Sales order → Contract billingdemo data

Built for hardware

Connected to your test floor and your ledger

Unit config files for the test station

For every built serial, Anvil generates a config file from the BOM revision and the serials actually linked into the unit. Test stations download it and post results back through a token API. The example is a server; the expected-hardware list works for any product with a BOM.

  • DMI/SMBIOS and IPMI FRU strings to burn, with a stable UUID per serial
  • Expected hardware for test scripts: CPUs and cores, DIMMs and GB, drives and TB, NICs, GPUs, PSUs, fans
  • Every generation is logged with its SHA-256, the user and the station (scoped, revocable tokens)
GET /api/v1/unit-config?serial=SV100006&format=env
DMI_SYSTEM_SERIAL_NUMBER='SV100006'
EXPECT_CPUS='2'
EXPECT_CPU_CORES='64'
EXPECT_DIMMS='16'
EXPECT_MEM_GB='1024'
EXPECT_DRIVES='6'
EXPECT_DRIVE_TB='23.04'
EXPECT_PSUS='2'
EXPECT_NIC_PORTS='2'
# station posts back:
POST /api/v1/test-results  {"test":"24-hour burn-in","result":"pass"}

Inventory that ties to the general ledger

Every stock movement posts a balanced journal. The perpetual subledger reconciles to GL 1200 by part, to the cent.

  • Receipts post purchase price variance; consumption goes to WIP; posting absorbs labour and overhead
  • Cost method per part (standard, average, FIFO, LIFO, specific), with journaled revaluation when it changes
  • Inventory audits by part: accepted count variances post to inventory adjustments (blind counts, recounts, manager disposition)
  • Period close, lower-of-cost-or-NRV write-downs, and valuation reconciliation
JOURNAL · RECEIPT PO-01042 · EXAMPLE
AccountDebitCredit
1200 Inventory12,480.00—
5100 Purchase price variance160.00—
2100 Goods received not invoiced—12,640.00
Balanced12,640.0012,640.00

SOX and GAAP controls

Audit-ready because the system won't let it be otherwise

Controls are enforced in the services and the database, not left to procedure. Your auditors get evidence, not explanations.

Hash-chained audit trail

Every create, change, approval, login and export is logged with user, time, IP and field-level before and after values. Verify integrity recomputes the chain.

Append-only evidence

Database triggers block UPDATE and DELETE on the audit log, ledgers, journals, QC sign-offs, count lines, AP lines, ECO sign-offs, export screenings, government property events, unit status history and more.

Segregation of duties

No self-approval. Assemblers can't sign QC on their own units, clerks can't approve their own invoices, requesters can't sign their own ECO, opportunity owners can't fund their own stock buys.

Quarantine discipline

Stock enters or leaves quarantine only through a non-conformance report, so every held unit or lot has a named owner and a due date.

Period close

Finance closes months, and postings into a closed period are refused. Only an administrator can reopen one.

Access control

Role-based permissions, two-step sign-in (TOTP) by policy, lockout after 5 failed sign-ins, idle timeouts, CSRF on every form, and users deactivated instead of deleted.

AUDIT LOG · EXAMPLE ENTRY
#1188  export.adjudicate  customer #13  by trade.compliance
       export_status: potential_match → denied   decision: confirmed
       prev_hash 4f1c9a…e07b   row_hash a83d52…91fc

Everything else you need

The rest of the operation, already connected

Sales

Product configurator

Option groups, quantity limits, require and exclude rules, live price and margin, deterministic part numbers. Configured lines can be reconfigured in place on a quote.

Sales

Quoted lead times

Each quote line carries a lead time computed from the BOM: the longest component lead time plus an assembly buffer per level that operations sets.

Planning

Team capacity

Each assembly team's load in hours against its capacity by week, default teams on the BOM, and missing time estimates added in bulk without a new revision.

Quality

NCRs, SCARs and scorecards

Non-conformance lifecycle with every disposition posted to the GL, supplier corrective actions, and ISO 9001 §8.4 scorecards.

Warehouse

Scanning and phone layouts

Scan serials at put-away, picks, shipping and NCR disposition. Bin moves, lot choice and inventory audits work on a phone on the floor.

Compliance

Country of origin and TAA

Origin captured per receipt and stamped on each serial. TAA status from the FAR 25.003 country list, enforced for flagged customers.

Partners

Customer and supplier portals

Customers see quotes, orders, shipments, invoices, warranties, their installed units and service tickets, never cost or margin. Suppliers answer RFQs, acknowledge POs and promise dates.

Finance

Payables and credit

Supplier invoices, credit memos, payments and aging, or hand them to Unanet. Customer credit limits, past-due holds and per-order release.

Engineering

BOMs, revisions and documents

Draft, released and obsolete revisions, compare, cost roll-up and phantom kits. Drawings and certificates attached to parts, lots, POs and ECOs.

Deployment and migration

Runs on your own servers

Plain PHP 8.5 and MySQL 8.4 in Docker, with no framework or third-party packages to patch. You host it and you own the data.

  1. Copy the environment file, set your company name, passwords and the key that encrypts two-step sign-in secrets.
  2. Start the stack. The first start creates the schema, applies migrations, installs the append-only triggers, creates the administrator and can load a demo company.
  3. Load your legacy data: suppliers, customers, parts, price lists, BOMs, opening inventory with serials and cost, and open POs, sales orders and work orders. Every file runs as a full dry run first and commits as one transaction.
SHELL
$ cp .env.example .env
$ docker compose up -d --build
[anvil-install] creating schema
[anvil-install] applying migration 032_bom_default_team
[anvil-install] applying migration 033_installed_base
[anvil-install] applying migration 034_email_notifications
[anvil-install] created administrator 'admin'
[anvil-install] loading demo data
[anvil-install] ready

ERP             http://localhost:8080
Partner portal  http://localhost:8080/portal

See it working

Walk through a live demo company, one role at a time

The demo company builds servers and rugged edge systems, with orders in flight, a configure-to-order model, a milestone contract, an invoice on hold, an ECO in review, an expired lot, a customer on export hold, a DPAS rated order, government property in custody, and a customer's server with a service ticket open in the portal. Sign in as each role to see what they see and what they're blocked from doing. We'll load your own products for the walkthrough.

salessales.managerplannerbuyerbuyer.managerwarehousewarehouse.managerassemblerqualityengineerfinanceap.clerktrade.compliancecfoauditor[email protected] (portal)

Book a walkthrough

[email protected]

Tell us what you build, how many units you ship a year and what you run today. We'll set up the demo with your products.