Skip to content

Port Ownership

Players and teams can acquire stations to earn passive income, secure supply priority, and shape regional economic flow. Three acquisition paths exist: direct purchase, economic takeover, and military takeover. Ownership turns a station from a neutral fixture into a configurable revenue engine — the owner sets tariffs, services, and defense, and absorbs the consequences when those choices conflict with traffic and reputation.

Status overall: 🚧 Partial. The Station.ownership JSONB field exists in the schema; the tariff lever and economic-takeover engine are implemented, while revenue streams are partial and the upgrade catalog is 📐 Design-only.

Overview

A station, once owned, behaves as a small business with its own treasury, balance sheet, and policy levers:

  • Revenue flows in from tariffs, docking fees, services, storage rental, and information sales.
  • Expenses flow out as maintenance, wages, defense upkeep, and upgrade upkeep.
  • Owners withdraw the surplus on a configurable schedule.
  • Rivals can attempt to wrest control through three competing acquisition paths.

Most stations in core Federation space are not for sale; ownership is concentrated in border, frontier, and lawless regions. See ./trading.md for the underlying station classes and pricing model that the tariff system layers on top of.

Acquisition

Status: 🚧 Partial — schema records ownership; the purchase, economic-takeover, and military-takeover workflows are implemented (port_ownership_service.py declare/siege/occupy); the upgrade catalog and revenue streams remain partial.

Purchase ✅ Shipped

Direct buy from the controlling faction. The faction lists the station at a price set by:

Factor Effect on price
Station class Class 0/4/5 not for sale; Class 1–3 cheap; Class 8–11 expensive
Region Frontier discounts, core-adjacent premium
Trailing revenue Higher recent transaction volume → higher ask
Existing upgrades Each upgrade adds its remaining capital value
Treasury balance Transfers to the buyer; included in the headline price

Range: 250,000 – 2,000,000 cr. Faction reputation gate varies by region; "Trusted" or higher with the controlling faction is the typical floor. Purchase is reputation-neutral with the seller (it is a sanctioned transaction) and reputation-positive in small amounts elsewhere (the new owner is a known entity).

A 24-hour grace window applies once the faction approves the buyer; the buyer must complete payment in that window or the listing reopens. Multiple qualified buyers within the same window trigger a sealed-bid auction resolved by the faction at the close of the window.

Listing surfaces in the station's public profile and in faction-bulletin endpoints; no off-market sales.

Economic takeover ✅ Shipped

A slow, reputation-neutral path. The challenger must:

  1. Account for >50% of the station's monthly transaction volume for 3 consecutive months, and
  2. Maintain hostile pricing pressure — undercut the station's spread or run trade contracts that bleed inventory — across the whole window.

When both conditions hold, the controlling faction triggers a forced sale at fair value:

fair_value_base = (90_day_rolling_avg_monthly_revenue) × 12   // 12× monthly = ~1-year payback

A condition multiplier penalises poorly-maintained stations:

condition_multiplier =
    1.0
  − 0.10 × max(0, 7 − days_since_last_defense_incident) / 7
  − 0.15 × (1 if security_level == 'none' else 0)

Recent defense incidents (within 7 days) reduce value by up to 10%; an undefended station incurs a flat 15% haircut. Final price is bounded:

final_value = clamp(
    fair_value_base × condition_multiplier,
    floor = acquisition_cost,           // can't force-sell below the original buy-in
    ceiling = acquisition_cost × 2.0    // no tariff-spike inflation
)

The current owner has 7 days to counter by:

  • Accepting the buyout at final_value, or
  • Matching the challenger's market share for one full month (which resets the 3-month clock to zero), or
  • Lodging a dispute within 3 days (e.g. "challenger is bot-farming volume artificially") that escalates to faction arbitration. Disputes must resolve before day 7 closes; an upheld dispute voids the takeover, a rejected dispute lets the timer run out.

On day 7 with no counter and no upheld dispute, credits equal to final_value transfer from the buyer's wallet to a faction-held escrow; the faction confirms the sale, the prior owner's wallet receives the proceeds (after deducting any outstanding station debts), and ownership flips atomically.

Volume is measured monthly on a rolling basis; any month where the challenger drops below 50% breaks the streak. Coordinated economic takeover by a team is allowed: the team's combined volume counts toward the threshold provided the team has a registered trade pact (filed publicly with the controlling faction).

Military takeover ✅ Shipped

Hostile and reputation-costly. The challenger:

  1. Files a declaration of intent with the controlling faction (24-hour real-time notice broadcast galaxy-wide).
  2. Conducts a siege during which the station's defenders (drones, patrol ships, garrison) must be defeated. Sector defense rules apply — see ../galaxy/sectors.md.
  3. Occupies the station once defenders are eliminated.

A successful military takeover incurs a severe reputation penalty with the prior owner's faction and a smaller penalty with allied factions. Restricted to frontier and lawless regions; core Federation space has standing garrisons that make military takeover impractical. Military Contract upgrades (see Upgrades) confer immunity for their duration.

After capture, a stabilization period applies:

  • 7-day post-takeover protection — the new owner is immune from a counter-takeover.
  • 3 days of -50% productivity — defenders' damage and operational disruption suppress traffic and service capacity.
  • Treasury seizure — the prior owner's treasury balance does not transfer to the attacker; it is forfeited to the controlling faction as a war-tax.

Multiple military takeover attempts by the same player on the same station face diminishing returns: each subsequent attempt within 90 days raises the defender garrison strength by 25%.

Ownership types

Status: 📐 Design-only across the board.

Solo

A single player owns 100%. Full unilateral control over pricing, tariffs, upgrades, and withdrawals. All revenue and all expenses flow to one wallet.

Team-owned

Registered to a Team (see ../gameplay/factions-and-teams.md). Role-based control:

  • LEADER + OFFICER roles configure pricing, tariffs, upgrades, and withdrawal schedule.
  • Members receive a revenue share configured at the team level.
  • Treasury is held by the team, not an individual player.

Loss of team membership ends share entitlement. Disbanding the team triggers a forced sale to the controlling faction at fair value.

Syndicate

Up to 10 co-owners with weighted voting. Each owner holds a stake from 1–99%, totalling 100%. Mechanics:

  • Revenue distributes proportionally to stake on each treasury sweep.
  • Policy votes resolve by stake-weighted vote per the threshold table below.
  • Stake transfers require approval of stake holders representing >50% of remaining stake.
  • Disputes that fail to reach majority for 14 days escalate to faction arbitration: the faction picks the option closest to its own policy preferences.

Vote thresholds

Vote type Threshold Veto right Window
Tariff change 50% stake None 72 h
Major upgrade (capex > 500k cr) 50% stake Any holder >25% can veto 72 h
Sale of station 66% stake Any holder >25% can veto 96 h
Withdrawal-schedule change 50% stake None 72 h

Quorum: ≥ 50% of total stake must be represented (voting or registered absent). Inactive owners (no login ≥ 30 days) have their voting power halved (50% of stake counted).

Tiebreak: if no majority emerges within the window, the highest single stakeholder's position wins. Ties at the top break randomly.

Veto enforcement: any holder >25% can lodge a stake-weighted veto on sale or major-upgrade votes. Veto blocks the action unless overridden by a 75% supermajority of voting stake explicitly against the veto.

Vote endpoint: POST /api/v1/stations/{id}/governance/vote with {vote_type, proposed_value, voter_stake_pct, position}. Vote weight is locked at vote-open time — no stake-buying mid-window.

Revenue streams

Status: 🚧 Partial.

Stream Range Configurable Notes
Trade tariff 2–8% per transaction Yes Levied on every player buy/sell at the station. Lower attracts traffic, higher extracts more per trade. See tariff impact below.
Docking fee 50–500 cr per docking Yes (toggle + amount) Flat charge. Discourages casual traffic; useful at high-traffic transit stations.
Service charges 0.8× – 2.0× standard Yes Repair, refueling, drone manufacture, refining. 1.0× is baseline; 0.8× is a loss-leader for traffic; 2.0× is premium pricing for captive markets.
Storage rental 1,000–10,000 cr/day per slot Yes Players rent station hangar slots for cargo storage. Slot count gated by Extended Storage upgrade.
Information sales 100–1,000 cr per query Yes (toggle + tier) Owner can sell market intelligence — recent trade volume, price trends, top traders — to other players. Requires Market Intelligence upgrade.
Price adjustment lever ±10% over base Yes Owner can nudge buy and sell prices within a ±10% band over the standard supply/demand formula. Applied after base pricing, before reputation/rank modifiers. Tightening the band attracts traders (lower sell, higher buy); widening extracts more per-trade margin (higher sell, lower buy) at the cost of traffic. Stored as Station.ownership.price_adjustment_pct.

All revenue accrues into the station treasury (see Treasury & cash flow), not directly to the owner's wallet.

Tariff impact

Tariffs are the largest revenue lever and the largest traffic risk. The elasticity model:

demand_factor = max( min(1.0 - 0.05 × tariff_pct, 1.0), 0.10 )

A 2% tariff yields demand_factor = 0.90 (90% of base traffic); 5% yields 0.75; 8% yields 0.60; 15%+ floors at 0.10. The floor prevents owners from gaming the formula by spiking tariffs to artificially halt traffic during a takeover defense.

Reputation composes on top:

traffic_with_rep = base_traffic × demand_factor × (1 + 0.10 × reputation_score)

reputation_score ∈ [-1, +1] derived from the station's faction-rep drift (see Reputation impact below). A station with deeply negative reputation (-1) loses an additional 10% on top of tariff elasticity; a pristine reputation gains 10%.

Regional tax composes last (per AU3-10):

traffic_final = traffic_with_rep × (1 - region.tax_rate)

region.tax_rate ∈ [0.0, 0.25].

Per-day owner revenue projection (planning view shown in the owner dashboard):

expected_revenue_per_day =
  traffic_final
  × per_trade_revenue_avg
  × (1 - region.tax_rate)
  × (owner_pct / 100)

Worked example: 60 trades/day after elasticity, 1,000 cr average trade, 5% region tax, 30% owner cut → 60 × 1,000 × 0.95 × 0.30 = 17,100 cr/day to the owner.

Implications, holding base traffic at 100 transactions/day:

Tariff demand_factor Traffic Per-trade rev (avg 1,000 cr) Daily revenue (gross)
2% 0.90 90 20 cr 1,800 cr
4% 0.80 80 40 cr 3,200 cr
5% 0.75 75 50 cr 3,750 cr
6% 0.70 70 60 cr 4,200 cr
7% 0.65 65 70 cr 4,550 cr
8% 0.60 60 80 cr 4,800 cr

The table understates the long-run effect: at 7–8% tariffs, players actively route around the station, reputation erodes, and the controlling faction begins to favour rivals — so the headline daily figure decays month over month as reputation_score slides negative.

Practical guidance:

  • 2% tariff — near-baseline traffic, modest revenue.
  • 4–5% tariff — sweet spot for most owners; per-trade revenue more than compensates for the traffic drop.
  • 7–8% tariff — predatory; traffic collapses, reputation erodes, neighbours become more attractive.

NPC traders apply the same elasticity. The owner cannot exempt themselves from their own tariff (this prevents tariff-arbitrage between owner-controlled and competitor stations). Team and syndicate co-owners are also subject to the tariff. See ./trading.md for how tariff stacks on top of the base spread.

Fee distribution

Every credit of station revenue (tariff + docking fee + service charge + storage rental + information sale) flows into three buckets per the canonical split from ./station-protection.md:

Bucket Default Floor Ceiling Purpose
Defense fund 40% 30% 60% Drone replenishment, hired guards, tractor upkeep, barracks ops
Owner cut 30% 10% 50% Owner withdrawal or team treasury
Operating 30% 30% 30% Maintenance, wages, faction obligations (immutable)

Owner-tunable bounds: the owner may rebalance defense and owner buckets within their bounds; operating is fixed at 30%. POST /api/v1/stations/{id}/fee-distribution/update validates:

defense_pct ∈ [0.30, 0.60]
owner_pct ∈ [0.10, 0.50]
operating_pct = 0.30                      // immutable
defense_pct + owner_pct + operating_pct = 1.0

Defense underfunding cascade: if defense_pct < 0.35 (i.e. defense bucket under 35% of revenue), a per-day accounting tick monitors Station.defense_budget. After 3 consecutive days of negative defense balance, the station auto-downgrades by one security tier (see ./station-protection.md for the tier model). The owner receives a warning notification on day 1 of deficit; on day 3 the downgrade executes and broadcasts to faction allies.

Upgrades

Status: 📐 Design-only.

Each upgrade has a one-time capital cost and a recurring monthly upkeep equal to 5–10% of capital cost. Upkeep is paid from the station treasury; if the treasury cannot cover upkeep, the upgrade goes dormant until paid.

1. Extended Storage 📐

  • Cost: 100,000 cr · Upkeep: 5%/mo
  • Effect: +50% commodity inventory cap. Smooths supply shocks, enables stockpiling for arbitrage windows, unlocks more storage-rental slots.
  • ROI: Pays back through reduced stockout frequency and rental income; ~6–12 months at moderate traffic.

2. Market Intelligence 📐

  • Cost: 200,000 cr · Upkeep: 5%/mo
  • Effect: +10% trade volume from informed players (subscribers) and unlocks the Information sales revenue stream.
  • ROI: Volume bump alone pays in ~6 months at moderate traffic; information sales accelerate.

3. Automated Trading 📐

  • Cost: 500,000 cr · Upkeep: 8%/mo
  • Effect: Reduces NPC trader friction at the station, +20% volume.
  • ROI: Strong at high-throughput border stations; weak at low-traffic frontier outposts.

4. Shipyard 📐

  • Cost: 1,000,000 cr · Upkeep: 10%/mo
  • Effect: Enables ship repair and minor construction at the station; opens a new revenue stream from repair/build contracts.
  • ROI: Gates the highest-value service tier; needs traffic to justify upkeep.

5. Refining Facility 📐

  • Cost: 750,000 cr · Upkeep: 8%/mo
  • Effect: Converts raw ore into refined equipment at premium prices. Adds a vertical stage to the station's commodity flow.
  • ROI: Strong at Class 1/3/6 stations adjacent to ore-producing regions.

6. Luxury Amenities 📐

  • Cost: 300,000 cr · Upkeep: 7%/mo
  • Effect: Attracts wealthy traders, +30% luxury_goods volume specifically. Marginal effect on other commodities.
  • ROI: Best paired with Class 10/11 stations.

7. Automated Defense Grid 📐

  • Cost: 500,000 cr · Upkeep: 6%/mo
  • Effect: +50% defense effectiveness. Stacks with sector defense rules — see ../galaxy/sectors.md.
  • ROI: Defensive; pays back by deterring takeover attempts and reducing pirate incident losses.

8. Security Patrol 📐

  • Cost: No capital cost; 200,000 cr/month upkeep
  • Effect: Deters pirates in adjacent sectors; prevents incident-related revenue loss (typically 5–15% of monthly revenue at frontier stations).
  • ROI: Net positive only at stations with non-trivial pirate exposure.

9. Military Contract 📐

  • Cost: 1,000,000 cr (one-time, binds for 3 months) · Upkeep: included in capital cost
  • Effect: Binds a Faction garrison to the station; immune to military takeover for the contract's duration. Renewable.
  • ROI: Insurance, not income. Worth it for high-value or contested stations.

Operating costs

Status: 📐 Design-only.

Cost Rate Notes
Maintenance 1% of acquisition cost / month Anchored on the original acquisition cost, not current market value, so successful upgrades and tariff swings don't retroactively raise the base bill. Pro-rated daily and deducted on the same tick that fees and tariffs accrue. Drawn from the operating bucket. On station sale (economic takeover, syndicate disbandment), the buyer's acquisition_cost resets to the new sale price for forward maintenance — no maintenance arbitrage by flipping ownership.
Wages Scales with services offered Each active service tier (repair, refuel, refining, shipyard) adds a wage line.
Defense upkeep Drone replenishment + patrol-ship retainers Scales with defense intensity; combat events spike the line. Drawn from the defense bucket of the fee distribution.
Upgrade upkeep 5–10% of upgrade capital cost / month Per-upgrade, summed.

The station treasury must cover all four lines monthly. Persistent shortfall triggers insolvency (see Treasury & cash flow).

Defense system

Status: 📐 Design-only.

Owners configure defense policy independently of sector defense, layered on top of it. Policy levers:

Related — docked-ship protection is a distinct concern covered in ./station-protection.md: the Station.security_level tier system (none/basic/standard/premium), hired STATION_SECURITY guard NPCs, the anti-theft tractor beam that locks stolen ships at undock, docking-fee economics (40/30/30 defense/owner/operating split), and the docked-ship-attack-shield rule. The defense levers in this section govern outward station defense against siege and sector-level threats; station-protection governs inward docked-ship safety. Both pull from the same revenue pool.

  • Docking access list — open / faction-restricted / personal whitelist / hostile-deny.
  • Punitive fees — surcharges for players on the owner's hostility list (up to 5× standard service rate).
  • Defender posture — passive (defend on attack) / active (engage hostile-flagged ships in nearby sectors) / aggressive (engage non-faction ships within range).
  • Drone allocation — share of the station's drone manufacturing output committed to local defense vs. resale.
  • Patrol radius — 0–3 sectors; wider radius costs more in defense upkeep.

Sector defense rules at ../galaxy/sectors.md govern what owner-controlled drones and patrol ships can actually do in surrounding space; the station policy adds the station-specific overlay. Aggressive postures in faction-patrolled space provoke faction response and accelerate negative reputation drift.

A player visiting a hostile-owned station may be denied docking outright or charged punitive fees; both states are visible in the station's public profile so the visitor knows before approach. Denial-of-docking does not block emergency-fuel rescue per the standard galaxy rule.

Takeover defense

Status: 📐 Design-only.

Economic defense

  • Counter-trade — place buy/sell orders at the station that absorb the takeover-attempt's volume, preventing the challenger from clearing the >50%-of-volume threshold.
  • Friendly trade contract — bind a friendly faction or team to a contracted volume share; counts toward the owner's defense of the threshold.
  • Tariff cut — temporarily lower the tariff to attract competing traffic and dilute the challenger's share.

Military defense

  • Drones — stocked from the station's drone manufacturing capacity.
  • Defense grid — the Automated Defense Grid upgrade.
  • Garrison — the Military Contract upgrade (full immunity for 3 months).
  • Allied response — team or syndicate co-owners can rally; faction allies may intervene if reputation is high enough.

Treasury & cash flow

Status: 🚧 Partial.

Station treasury

A per-station credit balance. All revenue flows in; all expenses flow out. Treasury balance is visible to owners only.

Owner withdrawals

Configurable schedule: daily, weekly, or monthly. On each sweep:

  • Treasury must retain at least 10% of its current balance as operating cushion.
  • Up to 90% of the balance flows to the owner (or, for teams/syndicates, distributes per share).
  • The owner can also pull manual ad-hoc withdrawals subject to the same 90% cap.

Cash-injection

Owners can inject personal credits into the treasury at any time. Injections do not count as revenue and are recoverable on a future sweep, subject to the 90% withdrawal cap. For syndicates, a stake-weighted vote can compel proportional injection during a defense or insolvency event.

Insolvency

If the treasury cannot cover monthly expenses for 3 consecutive months, the station auto-sells to the controlling faction at depreciated value (typically 40–60% of acquisition cost). Proceeds clear outstanding debts first, then distribute to owners.

Insolvency stops all upgrades, reverts service charges to baseline, and broadcasts the sale 7 days in advance — giving the owner a final window to inject cash or accept rescue offers from rivals. Rescue offers from rivals override the auto-sale path: any rival offer at or above the depreciated price (and approved by the controlling faction) takes precedence.

Worked example

A Class 2 border station, acquisition cost 800,000 cr, with Extended Storage and Market Intelligence upgrades:

Line Monthly amount
Trade tariff (4%, ~3,000 trades/mo) +120,000 cr
Docking fees +15,000 cr
Service charges +25,000 cr
Information sales +8,000 cr
Revenue total +168,000 cr
Maintenance (1% of 800k) -8,000 cr
Wages -12,000 cr
Defense upkeep -6,000 cr
Upgrade upkeep (5% of 100k + 5% of 200k) -15,000 cr
Expense total -41,000 cr
Net to treasury +127,000 cr

At a monthly sweep with the 10% reserve rule, ~114,000 cr flows to the owner each month — payback on the 800k acquisition in roughly 7 months, before factoring further upgrades or tariff changes.

Reputation impact

Status: 📐 Design-only.

Owning a station shifts the owner's reputation with the controlling faction over time:

Tariff range Faction rep drift
2–4% Neutral to slight positive
5–6% Neutral
7–8% Slow negative

Predatory pricing on services (1.8×–2.0×) compounds the negative drift. Information sales are reputation-neutral with the faction but can damage relationships with players whose data is being sold.

Other rep effects:

  • Fair operation for 6+ months at tariffs ≤4% accrues a small permanent reputation bonus with the controlling faction, recognised in faction-bulletin endpoints.
  • Insolvency incurs a moderate reputation penalty — a failed station is a failed local employer.
  • Military takeover of a station from another faction imposes the severe penalty noted in Acquisition; the new owner inherits the controlling faction's stance, which is hostile and recovers slowly.
  • Refusing a forced sale at the close of a successful economic takeover is not legally possible (the faction executes the transfer); reputation is unaffected.

Co-ownership lifecycle

Status: 📐 Design-only.

Forming a syndicate

A solo owner can convert to a syndicate by issuing share invitations totalling up to 99% of stake. Each invitee accepts or declines within 7 days; on acceptance, the original owner's stake is reduced by the accepted amount. Conversion fees: a one-time 1% of acquisition cost paid from the treasury.

Adding members to a team

A team-owned station inherits the team's roster automatically; new joiners gain the configured member share from the next sweep. Officer promotion within the team grants configuration access to the station without a separate invitation.

Dissolving co-ownership

Three paths:

  • Buyout — one stake-holder buys out all others at fair value, reverting to solo ownership.
  • Sale — stake-weighted vote sells the whole station to a third party or back to the controlling faction.
  • Disbandment — vote dissolves the syndicate; station auto-sells to the controlling faction at depreciated value, proceeds distributed by stake.

Inactive owners (no login for 30 days) have their stake voting power reduced by 50%; after 90 days inactive, their stake is forfeit to the controlling faction and rebalanced among active owners.

Source map

Target paths in Sectorwars2102:

Subsystem Target file
Station ownership model services/gameserver/src/models/station_ownership.py
Tariff & revenue service services/gameserver/src/services/station_revenue_service.py
Takeover engine (economic + military) services/gameserver/src/services/station_takeover_service.py
Upgrade catalog services/gameserver/src/core/station_upgrades.py

The existing Station.ownership JSONB field on models/station.py records the current owner and stake distribution; the services and catalog above are 📐 Design-only.